Слияние ствола с веткой - PullRequest
3 голосов
/ 24 февраля 2010

Это первый раз, когда я пытаюсь слить последнюю из ствола головы в мою ветку. Я просто хочу получать последние обновления от других разработчиков из моей команды в мою ветку. Я использую Subversion 1.6.7. Поэтому в диалоге «Слияние» я выбрал опцию «Объединить 2 разных дерева».

Мой вопрос такой:

Последняя редакция моей ветви - 358, а магистральная магистраль - 357. Поэтому, когда я выполняю тестовое слияние, он удаляет все новое в 358 (моя ветвь). Должен ли я в этом случае переходить от своего транка к ветви, а не от ветви к транку, поскольку у моей ветви более высокий номер ревизии? Я знаю в примерах на разных блогах, они говорят, что нужно перейти ОТ ветви к транку, но в моей ситуации у ветви более высокий номер ревизии.

альтернативный текст http://elbalazo.net/post/repobrowser.jpg

альтернативный текст http://elbalazo.net/post/merge.jpg

Теперь во время тестового слияния я не понимаю, почему он удаляет те файлы, которые не существуют в моем стволе (которые я добавил в ветку во время разработки):

альтернативный текст http://elbalazo.net/post/mergeoptions.jpg

альтернативный текст http://elbalazo.net/post/revisiongraph.jpg

альтернативный текст http://elbalazo.net/post/deleted.jpg

Теперь давайте сделаем обратное ... вот как я думаю, что это должно произойти (потому что тогда я собираюсь перейти от ревизии, которая ниже (357) к ревизии, которая выше (358). Так что здесь она идет от магистральная магистраль ДО моей ветки:

альтернативный текст http://www.elbalazo.net/post/mergdialog_trunk_to_branch.jpg альтернативный текст http://www.elbalazo.net/post/testmerge_trunk_to_branch.jpg ОБНОВЛЕНО ПОСЛЕ КОММЕНТАРИИ НИЖЕ:

Хорошо, поэтому, когда я пробую транк-транк, вот что я получаю:

альтернативный текст http://www.elbalazo.net/post/merge_trunk_to_trunk.jpg

альтернативный текст http://elbalazo.net/post/testmerge_trunk_to_trunk.jpg

Ответы [ 4 ]

6 голосов
/ 24 февраля 2010

Слияние черепах - это очень хорошо, но есть хитрость, которую вы должны знать.

При объединении, сначала используйте верхнюю опцию переключателя (объединить диапазон ревизий) и всегда сливайтесь с пунктом назначения. Итак, щелкните правой кнопкой мыши на целевой рабочей копии, выберите слияние, затем отредактируйте URL-адрес в диалоговом окне слияния, чтобы поле From: содержало ветвь, из которой вы хотите внести изменения.

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

Используйте кнопку «Показать журнал», чтобы выбрать нужные ревизии. Если есть mergeinfo (то есть ранее слитые ревизии), они будут показаны серым цветом.

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

Сейчас я выполняю слияние все время - это действительно легко - но я не думаю, что когда-либо использовал два других параметра слияния в первом диалоге. Всегда объединяйте URL с вашей рабочей копией; когда слияние завершено, вы можете просмотреть результаты и зафиксировать их, как только будете довольны.

2 голосов
/ 24 февраля 2010

Должен ли я идти из своего багажника в ветвь вместо ветки к стволу в этом случае, так как моя ветвь имеет номер ревизии выше?

Номер ревизии не должен определять, переходите ли вы от магистрали к ветви или наоборот. Что важно: что вы хотите объединить? Вы хотите переместить изменения, созданные в ветви, обратно в транк, или вы хотите переместить изменения из транка в ветку?

Если вы хотите переместить изменения из ветви в транк (что обычно и требуется, если вы используете ветки для «того, для чего они предназначены»), то объединитесь из ветви r345 - 358 в транк. В противном случае, сделайте это наоборот.

РЕДАКТИРОВАТЬ : то, что вы делаете на скриншоте выше, - это взятие дельты ОТ 358 до 357 и добавление ее в вашу рабочую копию. Поскольку вы добавили файлы в коммит 358 и 357 - 358 <0, дельта выполнит противоположную операцию, то есть удаление файлов. </p>

2 голосов
/ 24 февраля 2010

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

0 голосов
/ 25 февраля 2010

Если вы намереваетесь просто объединить все изменения соединительных линий в ветке, которых еще нет, вам вообще не нужно указывать диапазон редакций (объяснено после шагов)

Я считаю, что это должен быть ваш рабочий процесс:

  • Щелкните правой кнопкой мыши на чистой (без изменений) рабочей копии вашей ветки
  • Выберите «Объединить диапазон ревизий» и нажмите «Далее»
  • Заполните «URL для слияния» с URL-адресом соединительной линии и нажмите «Далее» (не заполняйте поле ревизий)
  • ... проверить слияние или выполнить слияние.

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

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

...