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

Я читал о ветвлении / слиянии с 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. Какой из вышеперечисленных вариантов следует использовать для каждого и почему?

EDIT

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

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

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

Ответы [ 5 ]

242 голосов
/ 27 марта 2013

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

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

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

  1. Оформить ветку / тег
  2. Щелкните правой кнопкой мыши по корню ветки | Черепаха SVN | Слияние ...
  3. Тип слияния: Слияние диапазона ревизий | Нажмите кнопку "Далее' enter image description here
  4. Диапазон слияния: Выберите URL-адрес каталога соединительных линий, который вы скопировали в ветку / тег. Введите ревизии для слияния или оставьте поле пустым, чтобы слить все ревизии | Нажмите кнопку "Далее' enter image description here
  5. Параметры слияния: Я просто оставил их по умолчанию | нажмите «Объединить» enter image description here
  6. Это объединит редакции с извлеченной веткой / тегом
  7. Затем зафиксируйте объединенные изменения в ветке / теге
28 голосов
/ 18 ноября 2008

Поведение зависит от версии вашего репозитория. 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, когда ваш репозиторий старше.

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

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

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

12 голосов
/ 18 ноября 2008

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

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

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

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

1 голос
/ 18 ноября 2008

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

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

0 голосов
/ 02 ноября 2016

Shift-Right Нажмите на папку и выберите TortoiseSVN -> Объединить все

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...