Ответ 1
Этот ответ должен помочь.
Кроме того, вы используете черепаховый SVN-клиент 1.6.x? Кажется, он имеет проблемы, если сервер SVN меньше 1.5.6...
Я взял на себя программный проект и решил поместить все под SVN (на Assembla) с помощью Tortoise SVN. Стойка находится под ROOT. Таким образом, соединительная линия содержала все приложение (которое я отметил 1.0). Для моей первой большой функции я создал ветку функций с именем "dev".
Я мог бы без проблем сменять изменения в ветке соединительной линии в ветке dev (поскольку я делал небольшие исправления ошибок). Как только моя функция была завершена, я сделал слияние обратно в магистральную ветку. До этого момента все работало. Новый код под ROOT показал новую функцию должным образом. Но затем я сделал фиксацию (результата слияния), и теперь каждый раз, когда я пытаюсь выполнить слияние с корнем или из ветки dev, SVN жалуется на "конфликт дерева" во многих файлах. Даже файлы, которые я не касался с момента слияния. Я пытался разрешить конфликты без успеха.
Я единственный разработчик, поэтому мне не нужны основные изменения в репозитории. Но я все равно хочу сохранить историю всех файлов, если это возможно.
Каким будет лучший способ исправить эту проблему? Есть ли способ, по которому я могу пометить все последние файлы в соединительной линии ROOT как "определенную" версию файла?
[EDIT] Дополнительная информация
[EDIT] Решение elhoim не устранило мою проблему. Тем не менее, он был прав с проблемами версии SVN. В настоящее время (2009-10-28), Ассембла использует SVN v1.5.1, а моя tortoiseSVN - v1.6. Вот почему у меня было столько конфликтов деревьев. Я попытался использовать решение, как это предусмотрено ссылкой elhoim, и это не сработало (я пытался несколько раз объединить несколько раз, прежде чем пытаться слить HEAD-HEAD. Некоторые файлы не переносятся на корневую ветвь из-за этого).
Увидев, что слияние HEAD-HEAD все равно не работает, я решил просто удалить все файлы ".svn" в моей папке ветки, скопировать файлы в папку ROOT и выполнить фиксацию.
Этот ответ должен помочь.
Кроме того, вы используете черепаховый SVN-клиент 1.6.x? Кажется, он имеет проблемы, если сервер SVN меньше 1.5.6...
Кажется, что некоторые изменения, сделанные на уровне структуры каталогов на багажнике, не были поглощены веткой dev, прежде чем пытаться слить обратно в багажник. Возможно, это вызвало конфликт дерева в вашем случае.
Я нашел этот раздел книги SVN очень полезным и содержит методы решения такой ситуации, как ваша. Надеюсь это поможет. http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html
[EDIT] ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Запустили ли вы svn в рабочей области, где вы действительно перезаписывали/разрешали конфликтующие версии? Могут быть файлы/папки, все еще помеченные как "конфликтующие" в вашей проблемной рабочей области (той, где вы фактически выполняли слияние). Итак, как только вы просмотрели эти и разрешили конфликты вручную, вы можете запустить svn "resolved". Я использую клиент командной строки subversion для своих слияний, но я проверял, и этот вариант доступен и для черепахи. Это должно сбить статус конфликта и продолжить работу. Гудлак.
В общем, поддержка объединения SVN может обрабатывать только одну ветвь функции. То есть, вы работаете в нем и объединяете изменения с туловища в него, а затем используйте svn merge --reintegrate
, чтобы слить его обратно в багажник, когда закончите.
После этого, если вы хотите продолжать работать, вам нужно создать новую ветку для работы. Я думаю, что вы можете удалить старый и сделать новый на своем месте без потери данных, если хотите сохранить один и тот же путь к репозиторию, но сначала можете попробовать с тестовым репо, только если информация svn:merge
будет получена поддатый.
Это не идеально. См. этот пост, когда была введена новая семантика слияния для более подробной информации.
Кроме того, остерегайтесь использования svn cp
или svn mv
для целей, отличных от ветки и слияния, - если вы это сделаете, вам нужно будет удалить ложные свойства svn:merge
, которые они создают (на ветке и если это необходимо), прежде чем запускать реинтеграцию, или он будет терпеть неудачу, будут сообщения о конфликте деревьев.
В целом, svn-ветвь и слияние по-прежнему довольно слабые по сравнению с распределенным семейством VCS (git, hg, bzr, darcs и т.д.), но если вы будете следовать этим рекомендациям, это сработает.