it-swarm.com.ru

Как правильно слить Subversion в Eclipse?

Я довольно привык к тому, как выполнять слияния CVS в Eclipse, и в остальном я доволен тем, как Subclipse и Subversive работают с репозиторием SVN, но я не совсем уверен, как правильно выполнять слияния. 

Когда я делаю слияние, мне кажется, что я хочу поместить объединенные файлы в отдельный каталог в моем проекте, а не перезаписывать старые файлы, которые должны быть заменены при слиянии, как я привык в CVS. 

Вопрос не относится ни к Subclipse, ни к Subversive. 

Спасибо за помощь!

17
awied

Я бы посоветовал не пытаться использовать плагины Eclipse в качестве основного доступа к Subversion.

Если вы разрабатываете для Windows, TortoiseSVN - лучшая программа, которую я видел для доступа к Subversion. Исследуйте каталог, в который вы хотите объединить, щелкните правой кнопкой мыши по нему и используйте опцию слияния Tortoise SVN. Предполагая неинтерактивное слияние, как только вы получите конфликты, вам придется просмотреть каждый конфликтующий файл и отредактировать конфликты, прежде чем пометить их как разрешенные. Для этого процесса я рекомендую программу под названием KDiff3, которая показывает вашу локальную копию хранилища (то, что было сохранено в .svn до слияния), вашу локальную копию (включая любые изменения) и копию, поступающую из хранилища, и позволяет вам легко увидеть (и даже вручную изменить, если необходимо) результат слияния. Он также автоматически обрабатывает множество мелких конфликтов.

KDiff3 является переносимым, TortoiseSVN является расширением Windows Shell, поэтому, если вы используете другую среду, я бы попытался использовать SVN для слияния. Но это было бы гораздо больше боли :)

1
MetroidFan2002

Слияние всей ветви в ствол

  1. Изучите историю проекта ветки, чтобы определить версию, из которой была взята ветка

    • по умолчанию Eclipse Team «History» показывает только последние 25 ревизий, поэтому вам нужно будет нажать кнопку в этом представлении с надписью «Показать все»
    • когда вы говорите «Показать все», вы вернетесь после даты ветки и покажете вам всю историю для ствола, поэтому вам придется искать свой комментарий там, где вы открыли ветку.
    • NOTE: если вы используете Tortise SVN для этой же задачи (перейдите к ветви и выберите «Показать журнал»), она покажет вам только историю ветви, чтобы вы могли точно сказать, где началась ветка
  2. Итак, теперь я знаю, что 82517 был первым идентификатором версии истории ветки. Так что все версии ветки после 82517 имеют изменения, которые я хочу объединить в транк

  3. Теперь перейдите к проекту «trunk» в рабочей области Eclipse и выберите «click правой кнопкой - Team - Merge»

  4. По умолчанию используется слияние в 1 URL.

    • выберите URL-адрес ветви, из которой вы объединяете
    • в разделе Ревизии выберите «Все»
    • нажмите ОК
  5. Это приведет вас к перспективе «Team Synchronizing» (если это не так, вам следует пойти туда самостоятельно) для разрешения конфликтов (см. Ниже)

Повторное объединение большего количества изменений ветви в ствол

  1. Рассеките историю проекта ствола, чтобы определить, когда вы в последний раз объединялись в ствол (вы должны были это прокомментировать)

    • ради аргумента скажем, эта версия была 82517
  2. Итак, теперь я знаю, что любую версию, большую, чем 82517 в ветке, нужно объединить в транк

  3. Теперь перейдите к проекту «trunk» в рабочей области Eclipse и выберите «click правой кнопкой - Team - Merge»

  4. По умолчанию используется слияние в 1 URL.

    • выберите URL-адрес ветви, из которой вы объединяете
    • в разделе Ревизии выберите переключатель «Ревизии» и нажмите «Обзор».
    • это откроет список последних 25 ревизий филиала
    • выбрать все ревизии с номером больше 82517
    • нажмите ОК (вы должны увидеть список ревизий в поле ввода рядом с переключателем)
    • нажмите ОК
  5. Это приведет вас к перспективе «Team Synchronizing» (если это не так, вам следует пойти туда самостоятельно) для разрешения конфликтов (см. Ниже)

Разрешение конфликтов

  1. Вы должны быть в перспективе «Синхронизация команды». Это будет выглядеть как любая обычная синхронизация для фиксации, когда вы видите файлы, которые являются новыми, и файлы, которые имеют конфликты.

  2. Для каждого файла, в котором вы видите конфликт, выберите «правый клик - Редактировать конфликты» (не дважды щелкните файл, он вызовет инструмент версии commit diff, это ОЧЕНЬ другое)

    • если вы видите такие вещи, как «<<<<<<< .working» или «>>>>>>> .merge-right.r84513», то вы находитесь в неправильном режиме редактирования
  3. как только вы разрешите все конфликты в этом файле, скажите файлу «пометить как объединенный»

  4. когда все файлы свободны от конфликтов, вы можете синхронизировать ваш проект Eclipse и зафиксировать файлы в SVN

72
DH4

Во-первых, если вы видите «>>>>>» и тому подобное в ваших файлах, когда просматриваете их в Eclipse, это, вероятно, означает, что вы не смотрите на файл с соответствующим редактором сравнения. Попробуйте щелкнуть правой кнопкой мыши файл в представлении «Проект» или «Синхронизировать» и выбрать «Редактировать конфликты», чтобы вызвать редактор сравнения, который будет отображать конфликтующие области графически, а не в виде текста. Обратите внимание, что редактор сравнения, который появляется для «Редактировать конфликты», отличается от того, который вы получаете, когда вы просто дважды щелкаете файл в представлении «Синхронизировать» - редактор сравнения дубликата показывает различия между вашим текущим файлом и тем, как он существовал. когда вы в последний раз проверяли или обновляли его, в то время как в диалоговом окне «Редактировать конфликты» отображаются различия между двумя источниками изменений (например, изменения, которые вы объединили, и изменения, которые существовали в вашем рабочем пространстве до того, как вы их слили).

Во-вторых, вы можете захотеть знать об ошибке в некоторых версиях подрывного плагина Eclipse, которая приводит к тому, что все файлы, которые приняли изменения слияния, будут неправильно помечены как имеющие конфликты. Эта ошибка была исправлена, но многие, похоже, еще не обновились, чтобы получить исправление. Более подробная информация здесь:

https://bugs.Eclipse.org/bugs/show_bug.cgi?id=312585

4
Some Guy

Используйте интеграцию Eclipse, она отлично работает.

Основное отличие от CVS заключается в том, что вы объединяете только дельты из ветки, то есть переходите от одной ревизии к другой. Это означает, что вы должны каким-то образом отслеживать правильную начальную ревизию (если у вас нет истории слияния SVN 1.5)

Если вы поняли это правильно, то только вы можете сделать изменения правильно с помощью редактора сравнения.

4
David Pierre

Обычно я проверяю обе ветви, а затем использую опцию сравнения друг с другом, которая выполняет синхронизирующее сравнение двух исходных деревьев. После интеграции изменений в одну ветку вы можете вернуться к хранилищу.

4
Joe Skora

Помните, что с помощью SVN вернуть модифицированное дерево в чистое состояние довольно просто. Просто создайте чистую рабочую область в ветви назначения слияния и выполните команду слияния, чтобы импортировать изменения из ветви источника слияния, затем синхронизируйте свое рабочее пространство, и вы получите обычное окно сравнения Eclipse, показывающее все измененные файлы слияния и конфликты. 

Если по какой-то причине вы не можете разрешить конфликты, вы можете вернуться к проекту и вернуться в чистое состояние, в противном случае вы выполняете слияние на месте, и как только вы это сделаете, вы можете выполнить коммит. Обратите внимание, что вам не нужно фиксировать, как только вы закончите обрабатывать конфликты, вы также можете вернуться к представлению dev, проверить, что код компилируется, запустить ваши модульные тесты, что угодно, а затем снова синхронизироваться и зафиксировать (как только конфликт локально решили они не вернутся)

в прошлый раз, когда я смотрел, когда вы используете команду слияния subclipse, он перезапишет объединенный файл (используя маркеры конфликта, чтобы показать конфликтующие области) и поместит оригинальную левую и правую стороны слияния в одно и то же место. он не должен помещать что-либо в разные каталоги.

Как правило, лучше всего зафиксировать все модификации слияния в одном коммите и иметь только изменения слияния в коммите, чтобы вы могли откатить слияние позже, если это необходимо.

3
Jean

инструмент слияния openCollabNet для subclipse довольно изящен. Есть много доступных типов слияния, и слияние, которое я только что выполнил с ним, когда без проблем. Я рекомендую это.

3
T0xicCode

Единственное, чего не хватает представлению синхронизации в Eclipse, - это возможность регистрации. В представлении «Синхронизация команды» я могу просматривать все свои изменения и разрешать конфликты, поэтому было бы довольно интуитивно понятно выполнить возврат прямо туда, а не возвращаться к представлению Java и выполнить регистрацию.

2
nku

Я попал сюда, потому что искал способ слияния во внешнем редакторе слияний (KDIFF3), но начал слияние из Eclipse. Я не был удовлетворен ответами, представленными выше. Итак, вот как настроить kdiff3 как редактор слияния и сравнения для SVN в Eclipse:

зайдите в Windows -> Настройки → Команда -> SVN -> Diff Viewer Добавить новый конфиг (кнопка добавления): Расширение или mimetype: * - если вы хотите, вы можете указать разные mimetypes для разных редакторов, я не сделал Понадобится таким образом алкантор.

Diff : Путь к программе C:\Program Files\KDiff3\kdiff3.exe (или там, где у вас есть редактор слияний - обратитесь к пути Windows, не стесняйтесь добавлять версию linux в комментарии или редактировать это ответ.)

Аргументы: $ {Base} $ {mine} $ {их}

Объединить : Путь к программе C:\Program Files\KDiff3\kdiff3.exe

Аргументы: $ {Base} $ {mine} $ {их} -o $ {объединены}

Это, вероятно, будет работать и для других редакторов слияния, но с другим синтаксисом аргументов (разберитесь, дайте нам знать :)).

Как обычно (команда-> конфликты редактирования) используется для слияния и сравнения-> foo для представления diff.

Ура

0
fl0w