Я пытаюсь заменить мой рабочий процесс слияния SVN - обычно svn diff
, иногда ручное редактирование патча, а затем patch
- фактическим svn merge
. Но я вижу какое-то неожиданное поведение и не могу найти объяснения ни в одной документации SVN онлайн. Вот мой сценарий:
- Новый репозиторий (рев. 0)
- Создан пустой файл с именем
file
в транке (версия 1)
- Скопированный транк в филиалы / branch1 (rev. 2)
- В branch / branch1 изменилось
file
на «abcdefg» и зафиксировано (rev. 3)
- Вернувшись в багажник, побежал:
svn merge -c3 ^/branches/branch1 . --ignore-ancestry
Пока все хорошо. file
в багажнике содержится "abcdefg". И транк не обновлялся ни с какой mergeinfo, так как я использовал --ignore-ancestry. Чтобы проверить, я запускаю:
svn pg svn:mergeinfo .
который ничего не печатает. Отлично. Итак, теперь я хочу применить изменение в r3 снова . Итак, я бегу:
svn merge -c3 ^/branches/branch1 . --ignore-ancestry
Эта команда ничего не делает 1037 *. Печатает без вывода, не меняет file
и не добавляет никакой mergeinfo. Если я сделаю то же самое со своим старым рабочим процессом diff-and-patch, как это:
svn diff -c3 ^/branches/branch1 | patch
Затем файл обновляется с изменением снова. А так как изменение составило всего:
--- file (revision 2)
+++ file (revision 3)
@@ -0,0 +1 @@
+abcdefg
повторное применение просто приводит к тому, что file
содержит две строки "abcdefg", как и предполагалось.
* * ~~~ тысяча сорок-девять
Я знаю, что это не должно быть обычным рабочим процессом, но я чувствую, что мне нужно понять, что на самом деле делает svn merge
в подобных ситуациях, прежде чем я смогу принять его с комфортом. (Нет необходимости поддерживать преимущества svn merge
- я уже на борту.)
Спасибо!