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 с изменениями транка. Я надеюсь. Будьте разработчиком.