В SVN v1.5 объединение выполняется rev-by-rev. Вишневое выделение областей для слияния заставит нас разрешить конфликты между стволами и ветвями дважды (один при объединении ревизий соединительных линий в FB и еще раз при объединении назад)
Тогда вы делаете что-то не так!
Посмотрим:
trunk fb
---------\
r1-10 |
r11-20 |
r20-30 |
Как правило, если вы хотите, чтобы изменения были сделаны в 11-20, то лучше всего объединить 1-20 в fb
и получить все там.
Затем, когда fb будет завершен, объедините 20-30, а затем скопируйте fb в транк (без слияния!).
Если вы решили объединить только r11: 20, хорошо, в конце вам нужно будет объединить r1: 10 и r20: 30
а затем скопировать fb в транк.
Нет способа объединить изменения дважды!
Я предполагаю, что вы, вероятно, делаете следующее:
copy trunk->fb
merge 11:20 -> fb.
merge fb-1:30 -> trunk !!!!! WRONG
Вы не можете сделать это, потому что вы бы слились 11:20 дважды. Вы должны всегда объединять код в
только в одном направлении.
Правильный путь:
copy trunk->fb
merge 1:20 -> fb.
merge 21:30 -> fb (now fb=trunk+feature)
copy fb -> trunk
Редактировать
Итак, правильные шаги:
Создание ветви объектов (FB) из ствола (копирование ветви в функцию с помощью svn-copy)
FB_0=trunk_0
Работа на ФБ.
FB_1=FB_0 + change_a
Объединить все предстоящие изменения из транка в FB.
trunk_1=trunk_0 + tr_change_a;
FB_2 = FB_1 + (trunk_1 - trunk_0) == trunk_0 + change_a + tr_change_a
Работа над FB
FB_3 = FB_2 + change_b
Объединение всех предстоящих неотложенных изменений из транка в FB.
trunk_2=trunk_1 + tr_change_n;
FB_4 = FB_3 + (trunk_2 - trunk_1) == trunk_0 + change_a + change_b + tr_change_a + tr_change_b
На данный момент у нас есть ветвь функций, которая состоит из всех новых функций и
все изменений в багажнике. Поэтому мы просто копируем разницу между двумя ветвями.
trunk_3 = trunk_2 + (FB_4 - trunk_2) = FB_4 = trunk_0 + change_a + change_b + tr_change_a + tr_change_b
Теперь FB удален, так как в транке есть все необходимые изменения.
Последний шаг выполняется:
svn merge /path/to/trunk@LatestRev /path/to/branches/fb@LatestRev .
svn ci
Или на обычном языке возьмите разницу между стволом и веткой и поместите их в ствол
делая их эквивалентными.
Этот шаблон описан в http://svnbook.red -bean.com / ru / 1.4 / svn.branchmerge.commonuses.html # svn.branchmerge.commonuses.patterns.feature
Теперь, если это не работает для вас, тогда я не понимаю вопроса.
Редактировать2: Для SVN-1,5
При работе с svn-1.5 вы можете объединить гораздо проще:
Когда вы работаете над функциональной веткой, вы просто время от времени объединяете изменения:
$ svn merge /path/to/trunk
Solve conflicts
$ svn ci
Он выстроит ваш FB со всеми изменениями в транке. В конце FB вы запускаете эту процедуру
еще раз, чтобы убедиться, что все в курсе. Вы идете в багажник и бежите
$ svn merge --reintegrate /path/to/fb
$ svn ci
В последнем случае не должно быть конфликтов, если вы работаете, как показано.