Не удается разрешить конфликт дерева с помощью SVN
-
19-09-2019 - |
Вопрос
Недавно я столкнулся с очень странным поведением subversion.
Я только что объединил свою локальную копию ветки с удаленной веткой.Все прошло гладко, но у меня 1 конфликт дерева (локальное удаление, удаленное обновление).
Хорошо, подумал я, соответствующим образом изменил рабочую копию и запустил "svn resolve --accept=working -R .".
Subversion сообщила, что решила мои проблемы, и "svn st" больше не показывал никаких проблем.Итак, я попытался зафиксировать, но svn сказал мне, что одна из внутренних папок (внутри моей конфликтной) устарела, и предложил svn обновить, НО из-за этого папка снова оказалась в конфликте!
Что мне делать, чтобы вырваться из этого призрачного круга?
Решение
Это может помочь, а может и не помочь, но иногда "очистка svn" устраняет странные проблемы с метаданными.Если вы извлекаете чистую рабочую копию, возникает ли в чистой копии та же проблема?Если это так, то предыдущий ответ звучит как шаг в правильном направлении
Другие советы
~/sandbox/jabira > svn resolve --accept=theirs-full testClient/
svn: warning: Tree conflicts can only be resolved to 'working' state; 'testClient' not resolved
~/sandbox/jabira > svn resolve --accept=working testClient/
Resolved conflicted state of 'testClient'
Надеюсь, это поможет
Вы можете использовать другой способ, отличный от команды svn resolve:
- Создайте исправление конфликтующего файла.(или резервную копию вашей версии конфликтующей папки с помощью svn export ...)
- Обновите свой репозиторий (обновление svn)
- Примените ранее выполненное исправление (или замените конфликтующий файл / папку резервной копией)
- Зафиксируйте изменение (svn commit)
Это то, что сработало для меня, чтобы отказаться от всех локальных изменений и перейти к файлам из репозитория сервера:
svn update --accept theirs-full
svn resolve --accept theirs-full <pathname>
Появится это сообщение:W155027:Конфликт дерева может быть разрешен только до "рабочего" состояния
Неинтуитивный следующий шаг, но это фактически устраняет подвох-22:
svn resolve --accept=working <pathname>
ТЕПЕРЬ рекурсивно верните все "рабочие" изменения.Это отменило все мои локальные изменения.
svn revert -R .
Вернуться к нормальной жизни, без ошибок:
svn update
Вероятно, у вас не были обновлены ваши папки, когда вы выполняли слияние, или где-то перед слиянием произошел конфликт.Чтобы исправить это, вам придется вернуть свой trunk (целевую папку) к предыдущей редакции.Затем запустите очистку этой папки.Затем запустите очистку в папке филиала (исходная папка).Затем снова обновите обе папки.Если вы получаете строки, выделенные красным цветом в любом рабочем процессе, то сначала вам нужно вернуть эти файлы, а затем привести их в нужное вам состояние.Затем обновите папки (да, еще раз).Наконец, выполните слияние еще раз.