Как правильно выполнить слияние Subversion в Eclipse?
-
01-07-2019 - |
Вопрос
Я довольно привык выполнять слияния CVS в Eclipse, и в остальном я доволен тем, как Subclipse и Subversive работают с репозиторием SVN, но я не совсем уверен, как правильно выполнять слияния.
Когда я делаю слияние, кажется, что объединенные файлы хочется поместить в отдельный каталог моего проекта, а не перезаписывать старые файлы, которые должны быть заменены при слиянии, как я привык в CVS.
Вопрос не касается ни Subclipse, ни Subversive.
Спасибо за помощь!
Решение
Я бы посоветовал не пытаться использовать плагины Eclipse в качестве основного доступа к Subversion.
Если вы разрабатываете для Windows, TortoiseSVN — лучшая программа для доступа к Subversion, которую я видел.Перейдите в каталог, который вы хотите объединить, щелкните его правой кнопкой мыши и используйте опцию слияния Tortoise SVN.Предполагая неинтерактивное слияние, как только вы обнаружите конфликты, вам придется просмотреть каждый конфликтующий файл и отредактировать конфликты, прежде чем пометить их как разрешенные.Для этого процесса я рекомендую программу под названием KDiff3, которая показывает копию вашего локального репозитория (то, что хранилось в .svn до слияния), вашу локальную копию (включая любые изменения) и копию, поступающую из репозитория, и позволяет вам легко увидеть (и даже изменить вручную, если необходимо) результат слияния.Он также автоматически обрабатывает множество мелких конфликтов.
KDiff3 является переносимым, TortoiseSVN — это расширение оболочки Windows, поэтому, если вы используете другую среду, я бы попробовал просто использовать SVN для слияния.Но это будет гораздо больнее :)
Другие советы
Объединение всей ветки в ствол
Просмотрите историю проекта Branch, чтобы определить версию, из которой была взята ветка.
- по умолчанию «История» команды Eclipse показывает только последние 25 редакций, поэтому вам придется нажать кнопку в этом представлении с надписью «Показать все».
- когда вы скажете «Показать все», вы вернетесь к дате ветки и также покажет всю историю ствола, поэтому вам придется искать свой комментарий, где вы разветвились.
- ПРИМЕЧАНИЕ:если вы используете Tortise SVN для той же задачи (перейдите к ветке и выберите «Показать журнал»), он покажет вам только историю ветки, чтобы вы могли точно сказать, где началась ветка.
Итак, теперь я знаю, что 82517 был первым идентификатором версии истории ветки.Итак, во всех версиях ветки после 82517 есть изменения, которые я хочу объединить в ствол.
Теперь перейдите к проекту «магистраль» в рабочей области Eclipse и выберите «щелчок правой кнопкой мыши — команда — объединить».
По умолчанию используется объединение по одному URL.
- выберите URL-адрес ветки, из которой вы выполняете слияние
- в разделе «Редакции» выберите «Все»
- нажмите ОК
Это приведет вас к перспективе «Синхронизация команды» (если это не так, вам следует перейти туда самостоятельно) для разрешения конфликтов (см. ниже).
Повторное объединение дополнительных изменений ветки в магистраль
Просмотрите историю проекта магистрали, чтобы определить, когда вы в последний раз объединялись с магистралью (вы должны были это прокомментировать)
- в качестве аргумента скажем, что это версия 82517
Итак, теперь я знаю, что любую версию выше 82517 в ветке необходимо объединить в транк.
Теперь перейдите к проекту «магистраль» в рабочей области Eclipse и выберите «щелчок правой кнопкой мыши — команда — объединить».
По умолчанию используется объединение по одному URL.
- выберите URL-адрес ветки, из которой вы выполняете слияние
- в разделе «Редакции» выберите переключатель «Редакции» и нажмите «Обзор».
- это откроет список из последних 25 ревизий ветки.
- выберите все ревизии с номером больше 82517
- нажмите ОК (вы должны увидеть список версий в поле ввода рядом с переключателем)
- нажмите ОК
Это приведет вас к перспективе «Синхронизация команды» (если это не так, вам следует перейти туда самостоятельно) для разрешения конфликтов (см. ниже).
Разрешение конфликтов
Вы должны находиться в перспективе «Синхронизация команды».Это будет выглядеть как любая обычная синхронизация для целей фиксации, когда вы видите новые файлы и файлы с конфликтами.
Для каждого файла, в котором вы видите конфликт, выберите «щелкнуть правой кнопкой мыши — Редактировать конфликты». (не дважды щелкните файл, это вызовет инструмент фиксации версии, это ОЧЕНЬ отличается)
- если вы видите что-то вроде «<<<<<<< .working» или «>>>>>>> .merge-right.r84513», то вы находитесь в неправильном режиме редактирования.
как только вы разрешите все конфликты в этом файле, скажите файлу «пометить как объединенный»
как только все файлы будут свободны от конфликтов, вы сможете синхронизировать свой проект Eclipse и передать файлы в SVN.
Обычно я проверяю обе ветви, а затем использую опцию сравнения друг с другом, которая выполняет синхронное сравнение двух исходных деревьев.После интеграции изменений в одну ветку вы можете повторно выполнить коммит обратно в репозиторий.
Используйте интеграцию Eclipse, она работает отлично.
Основное отличие от CVS заключается в том, что вы объединяете только изменения из ветки, т.е. изменения из одной ревизии в другую.То есть вам нужно как-то отслеживать правильную стартовую версию (если у вас нет истории слияний svn 1.5)
Если вы все сделали правильно, то только от вас зависит правильно внести изменения с помощью редактора сравнения.
Во-первых, если вы видите «>>>>>» и тому подобное в своих файлах при просмотре их в Eclipse, это, вероятно, означает, что вы не просматриваете файл в соответствующем редакторе сравнения.Попробуйте щелкнуть правой кнопкой мыши файл в представлении «Проект» или «Синхронизировать» и выбрать «Редактировать конфликты», чтобы открыть редактор сравнения, который покажет вам конфликтующие области графически, а не в виде текста.Обратите внимание, что редактор сравнения, который появляется для «Редактировать конфликты», отличается от того, который вы получаете, просто дважды щелкнув файл в представлении «Синхронизация» — редактор сравнения двойного щелчка показывает различия между вашим текущим файлом и тем, как он существовал. когда вы в последний раз извлекали или обновляли его, а в диалоговом окне сравнения «Редактировать конфликты» отображаются различия между двумя источниками изменений (например, изменения, которые вы объединили, и изменения, которые существовали в вашей рабочей области до объединения).
Во-вторых, вы, возможно, захотите узнать об ошибке в некоторых версиях подрывного плагина Eclipse, из-за которой все файлы, которые приняли изменения слияния, неправильно помечаются как имеющие конфликты.Эта ошибка была исправлена, но многие люди, похоже, еще не обновились, чтобы получить исправление.Подробности здесь:
Помните, что с помощью svn вернуть измененное дерево в чистое состояние довольно легко.Просто создайте чистое рабочее пространство в целевой ветке слияния и запустите команду слияния, чтобы импортировать изменения из исходной ветки слияния, затем синхронизируйте свое рабочее пространство, и вы получите обычное окно сравнения затмений, показывающее все измененные слиянием файлы и конфликты.
Если по какой-то причине вы не можете разрешить конфликты, вы можете svn вернуться к проекту и вернуться в чистое состояние, в противном случае вы выполняете слияние на месте, и как только вы закончите, вы можете зафиксировать его.Обратите внимание, что вам не нужно выполнять коммит: как только вы закончите обрабатывать конфликты, вы также можете вернуться в представление разработки, убедиться, что код компилируется, запустить модульные тесты и т. д., а затем снова синхронизировать и зафиксировать (как только конфликт будет локально устранен). решено, что они не вернутся)
В прошлый раз, когда я смотрел, когда вы используете команду слияния подклипов, она перезаписывает объединенный файл (с использованием маркеров конфликта, чтобы показать конфликтующие области) и помещает исходную левую и правую часть слияния в одно и то же место.он не должен ничего помещать в разные каталоги.
Как правило, лучше всего зафиксировать все изменения слияния в одном коммите и оставить в коммите только изменения слияния, чтобы при необходимости можно было откатить слияние позже.
Инструмент слияния подклипов в openCollabNet довольно удобен.Доступно множество типов слияния, и слияние, которое я только что выполнил с его помощью, прошло без проблем.Я рекомендую это.
Единственное, чего не хватает для синхронизации представления в eclipse, — это возможность регистрации.В представлении командной синхронизации я могу просматривать все свои изменения и разрешать конфликты, поэтому было бы довольно интуитивно понятно выполнить регистрацию прямо здесь, вместо того, чтобы возвращаться к представлению Java и выполнять регистрацию.
Я попал сюда, потому что искал способ слияния во внешнем редакторе слияния (KDIFF3), но запускал слияние из eclipse.Ответы, представленные выше, меня не удовлетворили.Итак, вот как настроить kdiff3 в качестве редактора слияния и сравнения для SVN в eclipse:
Перейдите в Windows -> Предпочтения → Team -> SVN -> Diff Viewer Добавить новую конфигурацию (кнопка добавить):Расширение или mimetype:* - если вы хотите, вы можете указать разные mimetypes для разных редакторов, мне это не нужно, поэтому alquantor.
Разница:Путь к программе C:\Program Files\KDiff3\kdiff3.exe (или там, где у вас есть редактор слияния — извините за путь к Windows, не стесняйтесь добавлять версию для Linux в комментариях или редактировать этот ответ.)
Аргументы:${base} ${моё} ${их}
Объединить:Путь к программе C:\Program Files\KDiff3\kdiff3.exe
Аргументы:${base} ${my} ${их} -o ${merged}
Вероятно, это будет работать и для других редакторов слияния, но с другим синтаксисом аргументов (разберитесь и дайте нам знать :)).
Использование обычное (команда->редактировать конфликты) для слияния и сравнение->foo для просмотра различий.
Ваше здоровье