SVN как разрешить новые конфликты деревьев при добавлении файла в две ветви - PullRequest
95 голосов
/ 20 апреля 2009

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

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

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

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

Ответы [ 4 ]

159 голосов
/ 05 февраля 2010

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

svn resolve --accept working <YourPath>

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

40 голосов
/ 20 апреля 2009

Как было упомянуто в более старой версии (2009) проекта «Древовидный конфликт» документ:

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

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

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

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

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

9 голосов
/ 16 февраля 2011

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

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

1 голос
/ 18 августа 2011

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

...