Подходы TortoiseSVN к разрешению конфликтов деревьев

TortoiseSVN может помочь с несколькими типами конфликтов дерева, используя окно Edit Conflict.

Проблема в том, что в случае конфликта типа "... при слиянии" TortoiseSVN не может угадать, какие файлы нужно объединить.

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

  • Разработчик А, работающий над стволом, изменяет файл Foo.c и передает его в репозиторий.
  • Я работаю над веткой, перемещаю файл Foo.c в Bar.c и передаю его в репозиторий.

Слияние изменений разработчика А с рабочей копией моей ветки приводит к конфликту дерева:

  • Bar.c уже находится в моей рабочей копии со статусом «нормальный».
  • Foo.c помечен как отсутствующий из-за конфликта дерева

В большинстве случаев мне нужно объединить изменения разработчика А в Foo.c с переименованным Bar.c.

Но как я могу это сделать?

Файл Foo.c с изменениями разработчика А отсутствует в моей ветке WC.

В справке TortoiseSVN говорится: «Обратите внимание, что если вы скопируете отсутствующий файл из репозитория, а затем пометите его как разрешенный, ваша копия будет снова удалена. Сначала вы должны разрешить конфликт».

Итак, мне нужно проверить trunk, чтобы получить доступ к файлу Foo.c для слияния? Есть ли более простой подход к решению этой проблемы?

Эта проблема (как TortoiseSVN может разрешать конфликты деревьев) очень важна для меня и наших разработчиков.

Не могли бы вы помочь мне?


person Sergey    schedule 08.11.2010    source источник


Ответы (2)


Вы можете использовать «Объединение двух URL», чтобы объединить изменения из Foo.c на «стволе» в ваш разветвленный и переименованный Bar.c.

cd branch/B
svn merge http://www/svn/svnroot/branches/B/Bar.c http://www/svn/trunk/Foo.c Bar.c

Принимая во внимание, что ветка/B является рабочей копией.

Чтобы окончательно устранить конфликт, разработчики A и B должны согласовать одно и то же имя файла. Использование разных файлов для одного и того же кода может быть нежелательным.

РЕДАКТИРОВАТЬ: Глядя на то, как «другие» vcs подходят к этой проблеме, я хотел бы цитата из параграфа 'Переименование файлов и объединение изменений':

Если я изменяю файл, а вы переименовываете его в новое имя, а затем мы объединяем наши соответствующие изменения, мои изменения в файле под его первоначальным именем будут распространены в файл под его новым именем. (Вы можете ожидать, что это «просто сработает», но на самом деле не все системы контроля версий делают это.)

Возможно, это повод попробовать Mercurial.

person zellus    schedule 08.11.2010

Мне нравится решение zellus. Вы также можете объединить перемещение файла в ветку, а затем выполнить слияние обратно в ствол.

Что я делаю при объединении больших ветвей, так это сначала объединяю ствол в ветку, разрешаю все конфликты (включая конфликты дерева), а затем объединяю результат обратно в ствол. Это также делает ствол более стабильным в течение периода слияния.

person Mike Miller    schedule 08.11.2010