SVN, как разрешать новые конфликты дерева при добавлении файла на две ветки
При объединении нескольких ветвей (с использованием SVN 1.6.1), где файл добавлен в обе ветки (а затем работал в этих отдельных ветвях), я получаю один из новых конфликтов дерева:
C foo.txt
> local obstruction, incoming add upon merge
Мне нужны изменения из обеих ветвей, но конфликт дерева не дает мне обычных файлов .workge,.merge-left и .merge-right, что понятно из-за характера конфликта. Есть довольно много таких конфликтов, и те, в которых удаление одного и того же файла произошло в каждой ветки, но их легко разрешить.
Как я могу решить эту проблему? Ред-книга SVN (для версии 1.6) не охватывает эту ситуацию.
Ответы
Ответ 1
Как уже упоминалось в старой версии (2009) проекта "Конфликт дерева" :
конфликт XFAIL от слияния файла с добавлением над версией
В этом тесте происходит слияние, которое приносит добавление файла без истории на существующий файл с версией.
Это должно быть древовидным конфликтом в файле сорта 'local obstruction, incoming add upon merge
. Исправлены ожидания в r35341.
(Это также называется "злые близнецы" в ClearCase):
файл создается дважды (здесь "добавлен" дважды) в двух разных ветвях, создавая две разные истории для двух разных элементов, но с тем же именем.
Теоретическое решение состоит в том, чтобы вручную объединить эти файлы (с внешним инструментом сравнения) в ветке назначения B2
.
Если вы все еще работаете с ветвью источника, идеальным сценарием будет удаление этого файла из ветки источника B1
, слияние от B2
до B1
, чтобы сделать этот файл видимым на B1
(тогда вы будете работать над одним и тем же элементом).
Если слияние невозможен, поскольку слияния происходят только от B1
до B2
, тогда для каждого слияния B1->B2
потребуется слияние вручную.
Ответ 2
Я нашел сообщение предлагающее решение для этого. Он собирается запустить:
svn resolve --accept working <YourPath>
который будет считать файлы локальной версии ОК.
Вы можете запустить его для отдельных файлов или целых каталогов проектов.
Ответ 3
Что делать, если входящие изменения - это те, которые вы хотите? Я не могу запустить svn resolve --accept yours-full
svn resolve --accept base
Ответ 4
Мне просто удалось втиснуть себя довольно тщательно, пытаясь следовать рекомендациям user619330 выше. Ситуация была: (1): я добавил несколько файлов во время работы над моей начальной ветвью, branch1; (2) Я создал новую ветвь, branch2 для дальнейшей разработки, отделив ее от сундука, а затем сменив мои изменения с branch1 (3) Сотрудник скопировал мои моды из ветки1 в свою ветку, добавил новые моды, и затем слился обратно в багажник; (4) Теперь я хотел объединить последние изменения с сундука в мою текущую рабочую ветвь, branch2. Это с svn 1.6.17.
Слияние связано с конфликтами дерева с новыми файлами, и мне нужна новая версия из туловища, где они отличались, поэтому из чистой копии ветки2 я удалил svn из конфликтующих файлов, совершил эти изменения branch2 (таким образом, создав временную версию ветки2 без соответствующих файлов), а затем выполнил мое слияние с багажником. Я сделал это, потому что я хотел, чтобы история соответствовала версии trunk, чтобы позже у меня не было больше проблем, когда мы пытались объединиться с trunk. Слияние прекрасное, я получил версию файлов trunk, svn st показывает все нормально, а затем я ударил больше конфликтов с деревом, пытаясь зафиксировать изменения, между удалением, которое я сделал ранее, и добавлением из слияния. Совершило ли решение svn конфликты в пользу моей рабочей копии (которая теперь имела версию файлов в багажнике) и получила ее для фиксации. Все должно быть хорошо, правильно?
Ну, нет. Обновление другой копии ветки2 привело к старой версии файлов (слияние до магистрали). Итак, теперь у меня есть две разные рабочие копии branch2, предположительно обновленные до той же версии, с двумя разными версиями файлов, и оба настаивают на том, что они полностью обновлены! Проверка чистой копии ветки2 привела к старой (pre-trunk) версии файлов. Я вручную обновляю их до версии trunk и фиксирую изменения, вернусь к своей первой рабочей копии (из которой я первоначально отправил изменения внешней линии), попробуйте обновить ее и теперь получите ошибку контрольной суммы для файлов, о которых идет речь. Удалите эту директорию, получите новую версию с помощью обновления, и, наконец, у меня есть то, что должно быть хорошей версией ветки2 с изменениями соединительных линий. Я надеюсь. Разработчик Caveat.