SVN проблемы слияния после миграции cvs2svn - PullRequest
1 голос
/ 29 января 2010

У нашей команды был репозиторий cvs, который мы преобразовали в svn через cvs2svn. В нашем репозитории есть основная ветвь (давайте назовем main), которая эффективно служит в качестве транка (даже если в прошлом она технически разветвлялась от транка).

После преобразования в cvs2svn я разветвился от main до branch.

Я сделал небольшое изменение в branch, а затем попытался объединить branch обратно в main:

[~/main] svn merge https:.../branch

Это должно вычислить разницу до branch с момента разделения, и применить эту разницу к main. Однако это происходит на пару лет назад, что приводит к миллионным конфликтам.

Есть идеи, как это исправить? Я искал Google, но ничего не могу найти.

Я знаю, что могу вызвать svn merge и передать точные номера ревизий. Я ищу лучшую альтернативу.

1 Ответ

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

Вы должны указать svn merge, какова ваша точка слияния, чтобы она знала, какой диапазон коммитов синхронизировать с main. Поскольку вы не указали диапазон, по умолчанию используется диапазон фиксаций через ревизию HEAD. Это вызывает слишком много изменений.

Получит предыдущую версию коммита, с которой вы будете синхронизироваться:

svn log --xml --stop-on-copy https://.../branch | grep 'revision=' | head -n 1 | sed 's/.*revision="\([0-9][0-9]*\)".*/\1/g'

В основном, это получает первую версию копии на ветке (которую я назову "REV"). Затем вы объедините его с ревизией HEAD вашей «основной» копии (в основном каталоге):

cd main
svn merge https://.../branch:REV https://.../branch:HEAD .

Это должно применить все изменения от REV до HEAD в копии «филиала» к «основной» копии. Это должно работать нормально даже для повторных слияний из ветки в основную.

Ура!

...