Используя TortoiseSVN, как объединить изменения из магистрали в ветку и наоборот?

132

Я читал о ветвлении / слиянии с Subversion 1.5, используя отличную и бесплатную книгу « Контроль версий с Subversion» . Я думаю, что понимаю, как использовать клиент командной строки Subversion для выполнения действий, которые мне нужны чаще всего, а именно:

Обновить ветку с изменениями из магистрали

Из рабочего каталога ветки запустите:

svn слияние http://svn.myurl.com/proj/trunk

Объединить ветку в магистраль

Из рабочего каталога транка запустите:

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

Однако мы используем TortoiseSVN 1.5 в качестве интерфейса для Subversion. Я хотел бы знать, как лучше всего выполнять эти операции с TortoiseSVN. В новом диалоговом окне в главном меню есть три различных параметра.

  1. Объединить ряд ревизий
  2. Реинтегрировать филиал
  3. Объединить два разных дерева

Насколько я понимаю, TortoiseSVN всегда выполняет svn со следующим синтаксисом.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM ПУТЬ

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

Мои вопросы:

  1. Как мне использовать TortoiseSVN 1.5 для слияния изменений из ствола в ветку?
  2. Как мне использовать TortoiseSVN 1.5 для слияния ветки с основной веткой, с методом реинтеграции и без него?
  3. Какие из вышеперечисленных вариантов мне следует использовать для каждого и почему?

РЕДАКТИРОВАТЬ

В ходе "пробного" тестирования я обнаружил, что операция Subversion в командной строке

svn слияние http://svn.myurl.com/proj/trunk

аналогична опции № 1 (Объединить диапазон ревизий) в TortoiseSVN, если я оставлю диапазон ревизий пустым.

Райан Тейлор
источник
Ссылки не найдены! = /
Леонардо Коста

Ответы:

28

Поведение зависит от версии вашего репозитория. Subversion 1.5 допускает 4 типа слияния:

  1. объединить sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. объединить источникWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. объединить [-c M [, N ...] | -r N: M ...] ИСТОЧНИК [@REV] [WCPATH]
  4. merge --reintegrate ИСТОЧНИК [@REV] [WCPATH]

В Subversion до 1.5 допускались только первые 2 формата.

Технически вы можете выполнить все слияния с помощью первых двух методов, но последние два включают отслеживание слияния subversion 1.5.

Опции TortoiseSVN объединяют диапазон или ревизии с отображением метода 3, когда ваш репозиторий составляет 1,5+, или метода 1, когда ваш репозиторий старше.

При объединении функций с веткой релиза / обслуживания вы должны использовать команду «Объединить диапазон ревизий».

Только когда вы хотите объединить все функции ветки обратно в родительскую ветку (обычно ствол), вам следует изучить возможность использования «Реинтегрировать ветку».

И последняя команда - объединение двух разных деревьев - полезна только тогда, когда вы хотите выйти за пределы нормального поведения ветвления. (Например, сравнение разных выпусков, а затем слияние различий с еще одной веткой)

Берт Хуйбен
источник
Может кто-нибудь, пожалуйста, помогите мне с stackoverflow.com/questions/51657636/… . Это важный вопрос для нашей команды, нам нужны некоторые идеи по этому поводу.
ankur
249

Я не мог правильно следовать другим ответам, вот еще руководство для чайников ...

Вы можете сделать это в любом случае trunk -> branchили branch -> trunk. Я всегда сначала trunk -> branchисправляю конфликты, а затем объединяюсь branch -> trunk.

Объединить ствол в ветку / тег

  1. Оформить заказ в филиале / теге
  2. Щелкните правой кнопкой мыши корень ветки | Черепаха SVN | Объединить ...
  3. Тип слияния: слияние ряда редакций | Нажмите кнопку "Далее' введите описание изображения здесь
  4. Диапазон редакции слияния: выберите URL-адрес магистрального каталога, который вы скопировали в ветку / тег. Введите редакции для объединения или оставьте поле пустым, чтобы объединить все редакции | Нажмите кнопку "Далее' введите описание изображения здесь
  5. Параметры слияния: я просто оставил по умолчанию | нажмите "Объединить" введите описание изображения здесь
  6. Это объединит ревизии в извлеченную ветку / тег
  7. Затем зафиксируйте объединенные изменения в ветке / теге
icc97
источник
4
Я пропустил «Диапазон ревизий для слияния» и сделал «Тестовое слияние». Это было то, что мне было нужно: диапазон был автоматически установлен для меня (с момента, когда была сделана ветка, до последней ревизии в ветке)
Lian
Отличный ответ - краткий и понятный. У меня это сработало, но когда я просто хотел объединить один файл конфигурации, по какой-то причине мне пришлось сделать это дважды. Теперь все хорошо. Cheers
Winger
@Lian Я сделал то же самое, чтобы слить из ствола в ветку; оставьте диапазон ревизий пустым, если вы хотите, чтобы последняя версия файлов из ствола была объединена с файлами ветки.
Winger
2
В текущей версии Tortoise SVN теперь есть возможность объединить все ревизии вместо того, чтобы оставлять поле «Диапазон ревизий пустым» на шаге 4.
Неизвестный разработчик
1
@Onkar Конфликты будут почти всегда. Если у вас есть две ветки, например, trunkи branch, убедитесь, что вы объединяете любые изменения изtrunk на branchкак можно скорее, чтобы избежать конфликтов в максимально возможной степени. Это будет означать , что при слиянии branchс trunkне должно быть никаких конфликтов.
icc97
12

Вы должны использовать «объединить диапазон ревизий».

Чтобы объединить изменения из ствола в ветвь, внутри рабочей копии ветки выберите «объединить диапазон ревизий» и введите URL-адрес ствола, а также начальную и конечную ревизии для слияния.

Так же в обратном порядке слить ветку в ствол.

О флаге --reintegrate см. Руководство здесь: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate

Давиде Гуалано
источник
1

Взгляните на svnmerge.py . Это командная строка, не может быть вызвана TortoiseSVN, но она более мощная. Из FAQ :

Традиционная подрывная деятельность позволяет вам объединять изменения, но не «запоминает» то, что вы уже слили. Он также не предоставляет удобный способ исключить набор изменений из объединения. svnmerge.py автоматизирует часть работы и упрощает ее. Svnmerge также создает сообщение фиксации с сообщениями журнала всех объектов, которые он слил.

Людвикас Букис
источник
6
svnmerge.py был разработан на Subversion 1.4 и более ранних версиях. Subversion 1.5 ввела отслеживание слияния в основной продукт.
Берт Хейбен
0

Удерживая клавишу «Shift», щелкните правой кнопкой мыши папку и выберите «TortoiseSVN» -> «Объединить все».

Денис
источник