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.