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

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

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

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

svn merge 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 PATH

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

Мои вопросы:

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

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

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

svn merge http://svn.myurl.com/proj/trunk

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

18.11.2008 15:50:12
Ссылки не найдены! = /
Leonardo Costa 31.10.2016 20:23:44
5 ОТВЕТОВ
РЕШЕНИЕ

Поведение зависит от версии вашего репозитория. 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. объединить - реинтегрировать ИСТОЧНИК [@REV] [WCPATH]

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

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

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

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

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

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

28
18.11.2008 17:44:45
Может кто-нибудь, пожалуйста, помогите мне с stackoverflow.com/questions/51657636/… . Это важный вопрос для нашей команды, нам нужны некоторые идеи по этому поводу.
ankur 9.08.2018 15:45:59

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

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

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

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

12
18.11.2008 16:02:42

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

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

1
18.11.2008 17:59:21
svnmerge.py был разработан на Subversion 1.4 и более ранних версиях. В Subversion 1.5 введено отслеживание слияний в основном продукте.
Bert Huijben 19.11.2008 10:19:57

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

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

Слить ствол в ветку / тег

  1. Оформить заказ на ветку / тег
  2. Щелкните правой кнопкой мыши на корне ветви | Черепаха SVN | Слить ...
  3. Тип слияния: Объединить диапазон ревизий | Нажмите кнопку "Далее' введите описание изображения здесь
  4. Диапазон ревизий слияния: выберите URL-адрес каталога соединительных линий, который вы скопировали в ветку / тег. Введите ревизии для слияния или оставьте поле пустым, чтобы слить все ревизии | Нажмите кнопку "Далее' введите описание изображения здесь
  5. Параметры слияния: я просто оставил их по умолчанию | нажмите «Объединить» введите описание изображения здесь
  6. Это объединит ревизии с извлеченной веткой / тегом
  7. Затем зафиксируйте объединенные изменения в ветке / теге.
247
19.01.2018 10:39:29
Я пропустил «Диапазон ревизий для слияния» и сделал «Тест слияния». Это было то, что мне было нужно: диапазон был автоматически установлен для меня (с момента, когда ветвь была сделана, до последней ревизии в ветке)
Lian 7.08.2013 18:51:28
Отличный ответ - лаконичен и понятен. Это сработало для меня, но когда я просто хотел объединить один файл конфигурации, по какой-то причине мне пришлось сделать это дважды. Теперь все хорошо. Приветствия
Winger 27.05.2014 21:54:44
@Lian Я сделал то же самое, чтобы слиться из ствола в ветку; оставьте диапазон ревизий пустым, если вы хотите, чтобы последняя версия файлов из ствола была объединена с файлами веток.
Winger 27.05.2014 21:56:40
В текущей версии Tortoise SVN теперь есть возможность объединить все ревизии вместо того, чтобы оставить шаг ревизий пустым на шаге 4.
The Unknown Dev 17.10.2016 15:27:30
@Onkar Некоторые конфликты почти всегда случаются. Если у вас есть две ветки, например, trunkи branch, то убедитесь, что вы объединяете любые изменения с trunkна branchкак можно скорее, чтобы избежать конфликтов в максимально возможной степени. Это будет означать , что при слиянии branchс trunkне должно быть никаких конфликтов.
icc97 25.01.2018 17:30:33

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

0
2.11.2016 18:03:41