У меня была ветвь функций моего ствола, и я периодически сливал изменения из моего ствола в мою ветку, и все работало нормально. Сегодня я пошел, чтобы слить ветку обратно в ствол, и все файлы, которые были добавлены в мою ствол после создания моей ветки, были помечены как «конфликт дерева». Есть ли способ избежать этого в будущем?
Я не думаю, что они должным образом помечены.
svn
merge
tree-conflict
Greg
источник
источник
Ответы:
Я нашел решение, прочитав ссылку, которую дал Гари (и я предлагаю пойти по этому пути).
Подводя итоги для разрешения конфликта дерева, фиксирующего ваш рабочий каталог с клиентом SVN 1.6.x, вы можете использовать:
где
.
находится каталог в конфликте.ВНИМАНИЕ : «Подтверждение вашей рабочей директории» означает, что ваша песочница будет той структурой, которую вы фиксируете, поэтому, если, например, вы удалили какой-то файл из вашей песочницы, они будут удалены и из репозитория. Это относится только к конфликтующей директории.
Таким образом, мы предлагаем SVN разрешить конфликт (
--resolve
), принимая рабочую копию внутри вашей песочницы (--accept working
), рекурсивно (-R
), начиная с текущего каталога (.
).В TortoiseSVN, выбрав «Resolved» по щелчку правой кнопкой мыши, фактически решает эту проблему.
источник
svn rm'd
что вам нужен каталог, который, по вашему мнению, больше не нужен, но кто-то еще добавил новый необходимый файл. Когда вы обновляете свою рабочую копию, вы должны получить конфликт дерева. Если вы просто слепо принимаете свое решение (удаляя каталог), то вы будете удалять файл этого человека. Здесь нет волшебной кнопки "поступай правильно". Вы должны понимать, что вы делаете, почему конфликтует с последней версией и как правильно ее решить.git
. Поскольку это скорее всего не практичный вариант для спрашивающего, то лучше всего справиться с ситуацией, описанной в этом ответе.Subversion 1.6 добавил Tree Conflicts для покрытия конфликтов на уровне каталогов. Хорошим примером может служить случай, когда вы локально удаляете файл, а затем обновление пытается внести изменение текста в этот файл. Другой случай, когда у вас есть subversion Rename файла, который вы редактируете, так как это действие Add / Delete.
В блоге Subversion CollabNet есть отличная статья о конфликтах деревьев .
источник
По моему опыту, SVN создает конфликт дерева, КОГДА я удаляю папку. Кажется, нет никаких причин.
Я единственный, кто работает над моим кодом -> удалить каталог -> зафиксировать -> конфликт!
Я не могу дождаться, чтобы переключиться на Git .
Я должен уточнить - я использую Subclipse . Это, наверное, проблема! Снова, я не могу ждать, чтобы переключиться ...
источник
Я не знаю, происходит ли это с вами, но иногда я выбираю неправильный каталог для слияния и получаю эту ошибку, даже если все файлы выглядят совершенно нормально.
Пример:
Слияние / svn / Project / branch / some-branch / Исходники в / svn / Project / trunk ---> Конфликт дерева
Объединить / svn / Project / филиалы / some-branch to / svn / Project / trunk ---> OK
Это может быть глупой ошибкой, но это не всегда очевидно, потому что вы думаете, что это что-то более сложное.
источник
Здесь происходит следующее: вы создаете новый файл в своей стволе, а затем объединяете его со своей веткой. В коммит-слиянии этот файл будет создан и в вашей ветке.
Когда вы объединяете свою ветку обратно в ствол, SVN снова пытается сделать то же самое: он видит, что файл был создан в вашей ветке, и пытается создать его в вашей стволе в коммите слияния, но он уже существует! Это создает конфликт дерева.
Чтобы избежать этого, нужно сделать специальное слияние, реинтеграцию . Вы можете достичь этого с помощью
--reintegrate
переключателя.Вы можете прочитать об этом в документации: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
После реинтеграции ветки настоятельно рекомендуется удалить ее, в противном случае вы будете продолжать получать конфликты деревьев при каждом слиянии в другом направлении: от ствола к вашей ветке. (По той же причине, что и описанная ранее.)
Есть способ обойти это тоже, но я никогда не пробовал. Вы можете прочитать это в этом посте: Реинтеграция ветки Subversion в v1.6
источник
--reintegrate
опция была объявлена устаревшей в Subversion 1.8. Начиная с SVN 1.8, такие слияния выполняются автоматически!Это может быть вызвано тем, что клиенты не используют одни и те же версии.
Использование клиента версии 1.5 и клиента версии 1.6 в одном и том же хранилище может создать такую проблему. (Я только что укусил себя.)
источник
Если вы сталкиваетесь с конфликтами деревьев, которые не имеют смысла, потому что вы не редактировали / не удаляли / не располагались где-либо рядом с файлом, существует также большая вероятность того, что в команде слияния произошла ошибка.
Может случиться так, что вы ранее уже слили кучу изменений, которые вы включили в текущее слияние. Например, в транке кто-то отредактировал файл, а затем переименовал его. Если в ваше первое слияние вы включите редактирование, а затем во второе слияние включите и редактирование, и переименование (по сути, удаление), это также вызовет конфликт дерева. Причина этого заключается в том, что ранее объединенное редактирование отображается как ваше собственное, и, следовательно, удаление не будет выполняться автоматически.
Это может произойти по крайней мере в 1.4 репозиториях, я не уверен, поможет ли здесь слияние, введенное в 1.5.
источник
До сегодняшнего дня, по крайней мере 3 месяца назад, я регулярно сталкивался с сотнями конфликтов деревьев при попытке объединить ветку обратно в ствол (используя TortoiseSVN 1.11 ). Будь перебазирован или нет, кстати. Я использую TortoiseSVN начиная с его версии 1, еще в 2004 году, и я постоянно реинтегрировал ветки. Наверное, что-то случилось недавно?
Итак, сегодня я провел этот простой эксперимент и обнаружил, что создает эти сумасшедшие конфликты:
Обсуждение: (см. Вложение)
все ревизии ... чего? Мало ли я знал, что клиент, должно быть, имел в виду « все ревизии цели ! О, МОЙ БОГ. Бедный дьявол, ты погиб здесь. Та ветка родилась @ 393, не могли бы вы прочитать свидетельство о рождении, ради бога?
Разрешение:
Мораль: я не могу понять, почему они до сих пор не исправили эту ошибку, потому что это одна, извините. Я должен уделить время, чтобы сообщить об этом им.
источник
Я столкнулся с этой проблемой и сегодня, хотя моя конкретная проблема, вероятно, не связана с вашей. Изучив список файлов, я понял, что сделал - я временно использовал файл в одной сборке из другой сборки. Я внес в него множество изменений и не хотел потерять связь с историей SVN, поэтому в своей ветке я переместил файл из папки другой сборки. Это не отслеживается SVN, поэтому похоже, что файл удален, а затем добавлен заново. Это приводит к конфликту деревьев.
Я решил проблему, переместив файл обратно, зафиксировав, а затем объединив свою ветку. Затем я переместил файл обратно потом. :) Это, казалось, добилось цели.
источник
У меня была аналогичная проблема. Единственное, что на самом деле мне помогло, - это удалить конфликтующие подкаталоги с помощью:
Затем скопируйте их снова из другого корневого каталога в рабочую копию, которая имеет их с:
Тогда делай
а также
Вы можете получать предупреждения с последним, но просто игнорируйте их и, наконец,
источник
У меня была такая же проблема, и я решил ее заново, выполнив слияние с помощью этих инструкций . По сути, он использует «объединение двух URL» в SVN, чтобы обновить
trunk
текущее состояние вашей ветви, не беспокоясь об истории и конфликтах деревьев. Спасло меня от ручного исправления 114 древовидных конфликтов.Я не уверен, сохраняет ли она историю так, как хотелось бы, но в моем случае это стоило того.
источник
Сценарий, с которым я иногда сталкиваюсь:
Предположим, у вас есть ствол, из которого вы создали ветку релиза. После некоторых изменений в стволе (в частности, создания каталога "some-dir"), вы создаете ветку Feature / Fix, которую вы хотите позже объединить с веткой Release (поскольку изменения были достаточно малы, а функция / Fix важна для выпуска) ,
Если вы затем попытаетесь объединить ветку feature / fix непосредственно с веткой release, вы получите конфликт дерева (даже если каталог даже не существовал в ветке feature / fix):
Таким образом, вам нужно явно объединить коммиты, которые были сделаны в транке, перед созданием ветки feature / fix, которая создала каталог some-dir, перед слиянием ветки feature / fix.
Я часто забываю об этом, поскольку это не нужно в git.
источник