2010-07-14 2 views
1

Я немного неясно, о слиянии ветвей в SVN и был интересно, если кто-то может объяснить ...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-ответвление в project2/trunk?

Файлы «foo.c» и «boing.c» имеют две независимые истории (foo от project1/trunk -> project2/branch/project1-offshoot, а также от project2/trunk; boing from project2/trunk и из project2/branch/project1-offshoot). Может ли файл SVN иметь двух предков? Или вы вынуждены выбрать его как предка, а затем сделать текстовое слияние из другого файла без ссылки на источник этого файла?

ответ

3

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

От контроля версий с Subversion (для Subversion 1.5), Бен Коллинз-Зуссманом, Брайан У. Fitpatrick и К. Майкла PILATO:

«Большинство слияний включают сравнивающие дерева , имеющие родственные, связанные с один другой, поэтому svn merge defaults . По этой причине однако вы можете захотеть слить команду , чтобы сравнить два не связанных дерева . "

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

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

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

Смежные вопросы