Подтвердить что ты не робот

Как исправить конфликт ветки/дерева SVN?

Я взял на себя программный проект и решил поместить все под SVN (на Assembla) с помощью Tortoise SVN. Стойка находится под ROOT. Таким образом, соединительная линия содержала все приложение (которое я отметил 1.0). Для моей первой большой функции я создал ветку функций с именем "dev".

Я мог бы без проблем сменять изменения в ветке соединительной линии в ветке dev (поскольку я делал небольшие исправления ошибок). Как только моя функция была завершена, я сделал слияние обратно в магистральную ветку. До этого момента все работало. Новый код под ROOT показал новую функцию должным образом. Но затем я сделал фиксацию (результата слияния), и теперь каждый раз, когда я пытаюсь выполнить слияние с корнем или из ветки dev, SVN жалуется на "конфликт дерева" во многих файлах. Даже файлы, которые я не касался с момента слияния. Я пытался разрешить конфликты без успеха.

Я единственный разработчик, поэтому мне не нужны основные изменения в репозитории. Но я все равно хочу сохранить историю всех файлов, если это возможно.

Каким будет лучший способ исправить эту проблему? Есть ли способ, по которому я могу пометить все последние файлы в соединительной линии ROOT как "определенную" версию файла?


[EDIT] Дополнительная информация

  • Да, "главное" и "багажник" - это одно и то же. Я уточнил свой вопрос.
  • Когда вы объединились с ветвью функций, вы сначала сделали еще одно слияние из магистрали, чтобы отменить последние изменения сундуков? "Да. Строка была актуальной. И ветвь dev имела все изменения от ствол.
  • "все покрутило на совершении": я имел в виду, что коммит был прекрасен, но как только я начал сливаться с багажником/багажником, SVN жалуется на "конфликты деревьев".
  • У меня более 200 конфликтов деревьев. Итак, я ищу команду "принять все"

[EDIT] Решение elhoim не устранило мою проблему. Тем не менее, он был прав с проблемами версии SVN. В настоящее время (2009-10-28), Ассембла использует SVN v1.5.1, а моя tortoiseSVN - v1.6. Вот почему у меня было столько конфликтов деревьев. Я попытался использовать решение, как это предусмотрено ссылкой elhoim, и это не сработало (я пытался несколько раз объединить несколько раз, прежде чем пытаться слить HEAD-HEAD. Некоторые файлы не переносятся на корневую ветвь из-за этого).

Увидев, что слияние HEAD-HEAD все равно не работает, я решил просто удалить все файлы ".svn" в моей папке ветки, скопировать файлы в папку ROOT и выполнить фиксацию.

4b9b3361

Ответ 2

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

Я нашел этот раздел книги SVN очень полезным и содержит методы решения такой ситуации, как ваша. Надеюсь это поможет. http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html

[EDIT] ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:


Запустили ли вы svn в рабочей области, где вы действительно перезаписывали/разрешали конфликтующие версии? Могут быть файлы/папки, все еще помеченные как "конфликтующие" в вашей проблемной рабочей области (той, где вы фактически выполняли слияние). Итак, как только вы просмотрели эти и разрешили конфликты вручную, вы можете запустить svn "resolved". Я использую клиент командной строки subversion для своих слияний, но я проверял, и этот вариант доступен и для черепахи. Это должно сбить статус конфликта и продолжить работу. Гудлак.

Ответ 3

В общем, поддержка объединения SVN может обрабатывать только одну ветвь функции. То есть, вы работаете в нем и объединяете изменения с туловища в него, а затем используйте svn merge --reintegrate, чтобы слить его обратно в багажник, когда закончите.

После этого, если вы хотите продолжать работать, вам нужно создать новую ветку для работы. Я думаю, что вы можете удалить старый и сделать новый на своем месте без потери данных, если хотите сохранить один и тот же путь к репозиторию, но сначала можете попробовать с тестовым репо, только если информация svn:merge будет получена поддатый.

Это не идеально. См. этот пост, когда была введена новая семантика слияния для более подробной информации.

Кроме того, остерегайтесь использования svn cp или svn mv для целей, отличных от ветки и слияния, - если вы это сделаете, вам нужно будет удалить ложные свойства svn:merge, которые они создают (на ветке и если это необходимо), прежде чем запускать реинтеграцию, или он будет терпеть неудачу, будут сообщения о конфликте деревьев.

В целом, svn-ветвь и слияние по-прежнему довольно слабые по сравнению с распределенным семейством VCS (git, hg, bzr, darcs и т.д.), но если вы будете следовать этим рекомендациям, это сработает.