SVN: слияние ветвей - PullRequest
       4

SVN: слияние ветвей

1 голос
/ 14 июля 2010

Я немного не уверен насчет слияния веток в SVN, и мне было интересно, может кто-нибудь объяснить ...

project1
   trunk
      foo.c
      bar.c
      baz.c
   branches
   tags
project2
   trunk
      foo.c
      quux.c
      boing.c
   branches
      project1-offshoot
         foo.c
         bar.c
         baz.c
         boing.c
   tags

Предположим, у нас следующая ситуация.В нашем хранилище SVN есть «project1».Боб запускает новый проект "project2" и начинает работать под стволом.Затем Чарли говорит: «Подожди минутку! Это похоже на проект1!»поэтому он говорит Бобу, что он создаст ветку для project2 под названием "project1-offshoot" (svn copy из project1 / trunk) и соответствующим образом изменит ее, чтобы подготовиться к объединению с project2.

Что такоесоответствующее действие, которое Боб и Чарли предпримут, чтобы объединить project2 / branch / project1-offshoot в project2 / trunk?

Файлы "foo.c" и "boing.c" каждый имеют две независимые истории (fooиз проекта1 / транк -> проект2 / филиалы / проект1-оффшот, а также из проекта2 / транк; boing из проекта2 / транк и из проекта2 / филиалы / проект1-оффшот). Может ли файл в SVN иметь двух предков? Или вы вынуждены выбрать одного в качестве предка, а затем выполнить текстовое слияние из другого файла без сохранения какой-либо ссылки на источник этого файла?

1 Ответ

3 голосов
/ 15 июля 2010

Возможно, вам потребуется использовать команду merge с параметром --ignore-ancestry, поскольку исходные файлы имеют независимую историю без общего предка.

Из контроля версий с помощью Subversion (для Subversion 1.5), Бен Коллинз-Суссман, Брайан В. Фитпатрик и К. Майкл Пилато:

"Большинство слияний включают сравнение деревьев которые родственно связаны с одним другой; следовательно, SVN Merge по умолчанию к этому поведению. Время от времени, Тем не менее, вы можете захотеть объединить Команда для сравнения двух не связанных деревья ".

"Если вы спросите SVN объединить, чтобы сравнить два дерева, вы бы увидели все первое существо дерева удалено с последующим добавлением целое второе дерево! В этих ситуации, вы хотите, чтобы SVN слиться с сделать сравнение только на основе пути, игнорируя любые отношения между файлами и каталоги. Добавить --ignore-ancestry опция для вашей команды слияния, и она будет вести себя так же, как svn diff. (И наоборот, Опция --notice-ancestry заставит svn diff вести себя как svn merge команда.) "

Если я правильно понимаю ваш второй вопрос (т. Е. «Может ли файл в SVN иметь двух предков?»), Ответ - нет. Вам придется либо объединить изменения из проекта 1 в проект 2, либо наоборот.

Просто примечание: Обычно папка ветвей проекта зарезервирована для ветвей ствола этого конкретного проекта, то есть только ветки ствола проекта1 попадают в папку веток проекта1. Конечно, ничто не мешает кому-то делать что-то другое, но это делает вещи красивыми и чистыми

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