Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

Объединение всей ветки в ствол

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

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

  3. Теперь перейдите к проекту «магистраль» в рабочей области Eclipse и выберите «щелчок правой кнопкой мыши — команда — объединить».

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

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

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

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

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

  3. Теперь перейдите к проекту «магистраль» в рабочей области Eclipse и выберите «щелчок правой кнопкой мыши — команда — объединить».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Помните, что с помощью 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 для просмотра различий.

Ваше здоровье

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top