SVN как разрешить новые конфликты деревьев при добавлении файла в две ветви

При объединении нескольких ветвей (используя SVN 1.6.1), где файл был добавлен в обе ветви (а затем работал в этих отдельных ветвях), я получаю один из новых конфликтов дерева:

      C foo.txt
  >   local obstruction, incoming add upon merge

Мне нужны изменения из обеих веток, но конфликт дерева не дает мне обычных файлов.working,.merge-left &.merge-right - что понятно из-за характера конфликта. Существует довольно много таких конфликтов, и в них происходит удаление одного и того же файла в каждой ветви, но их легко разрешить.

Как я могу решить эту проблему? Книга SVN Redbean (для 1.6) не охватывает эту ситуацию.

4 ответа

Решение

Как упоминалось в более ранней версии (2009 г.) проектного документа "Конфликт деревьев":

Конфликт XFAIL из-за слияния над версионным файлом

Этот тест выполняет слияние, которое переносит добавление файла без истории в существующий версионный файл.
Это должен быть конфликт дерева в файле local obstruction, incoming add upon merge Разнообразие Исправлены ожидания в r35341.

(Кстати, это также называется "злые близнецы" в ClearCase):
файл создается дважды (здесь "добавляется" дважды) в двух разных ветвях, создавая две разные истории для двух разных элементов, но с одинаковым именем.

Теоретическое решение состоит в том, чтобы вручную объединить эти файлы (с помощью внешнего инструмента сравнения) в целевую ветку ' B2 ".

Если вы все еще работаете с исходной веткой, идеальным сценарием будет удаление этого файла из исходной ветви. B1 Вернитесь из B2 в B1 чтобы сделать этот файл видимым на B1 (тогда вы будете работать над тем же элементом).
Если слияние невозможно, потому что слияние происходит только из B1 в B2, тогда для каждого будет необходимо ручное слияние B1->B2 сливается.

Я нашел пост, предлагающий решение для этого. Это собирается бежать:

svn resolve --accept working <YourPath>

который будет требовать файлы локальной версии как ОК.
Вы можете запустить его для одного файла или целых каталогов проекта.

Что делать, если вам нужны входящие изменения? Я не могу запустить SVN разрешения - принять их полный

SVN разрешения - принять базу

Мне просто удалось втиснуть себя довольно тщательно, пытаясь последовать совету user619330 выше. Ситуация была: (1): я добавил несколько файлов, работая над моей первоначальной ветвью branch1; (2) Я создал новую ветвь, branch2 для дальнейшего развития, разветвил ее из ствола и затем слил мои изменения из branch1 (3) Сотрудник скопировал мои моды из branch1 в свою собственную ветку, добавил дополнительные моды, а затем слил обратно в багажник; (4) Теперь я хотел объединить последние изменения из ствола в мою текущую рабочую ветвь branch2. Это с SVN 1.6.17.

В результате слияния возникли конфликты дерева с новыми файлами, и я хотел, чтобы новая версия была из ствола, где они отличались, поэтому из чистой копии branch2 я удалил svn конфликтующих файлов, зафиксировал эти изменения branch2 (создав таким образом временную версия branch2 без рассматриваемых файлов), а потом сделал мое слияние из багажника. Я сделал это, потому что хотел, чтобы история соответствовала версии транка, чтобы у меня не было больше проблем при попытке слияния обратно с транком. Слияние прошло нормально, я получил версию ствола файлов, svn-st показывает все в порядке, а затем я обнаружил больше конфликтов в дереве при попытке зафиксировать изменения, между удалением, которое я сделал ранее, и добавлением из слияния. Сделал svn для разрешения конфликтов в пользу моей рабочей копии (которая теперь имела транковую версию файлов) и получил ее для фиксации. Все должно быть хорошо, верно?

Ну нет. Обновление другой копии branch2 привело к старой версии файлов (слияние перед транком). Так что теперь у меня есть две разные рабочие копии branch2, предположительно обновленные до одной и той же версии, с двумя разными версиями файлов, и обе настаивают, что они полностью обновлены! Проверка чистой копии branch2 привела к старой (предстволовой) версии файлов. Я вручную обновляю их до версии ствола и фиксирую изменения, возвращаюсь к своей первой рабочей копии (из которой я изначально отправил изменения ствола), пытаюсь обновить ее и теперь получаю ошибку контрольной суммы для рассматриваемых файлов. Снесите каталог, о котором идет речь, получите новую версию через update, и, наконец, у меня есть то, что должно быть хорошей версией branch2 с изменениями транка. Я надеюсь. Будьте разработчиком.

Другие вопросы по тегам