SVN X остается в конфликте деревьев
-
26-09-2019 - |
Вопрос
Я использую VisualSVN (который использует черепаху). Я случайно перемещаю папку в другое место. Когда пытается переместить его назад, SVN Pukes с этой ошибкой. Это произошло один раз раньше, и мне удалось сделать случайные обновления / комбиниты, не зная, что я делал, и это было «исправлено». Я не могу снова тянуть ту же магию, поэтому мне нужно знать, как получить мои файлы и каталог и конфликт в дереве.
Спасибо!
Решение
У меня была та же ошибка (конфликт деревьев), но из другого рабочего процесса.
Найти, какой процесс имеет замок. Скачать Dising.exe и открыть для папки, которую вы извлекли. Затем пробежать "C:\path\handle.exe" "C:\path\FileOrFolder"
.
https://technet.microsoft.com/en-us/sysinternals/bb896655.aspx.
Рабочий процесс для воспроизведения:
- delete folder (having one of the files locked by a program that is within this folder)
- commit parent folder of folder you deleted, and look for red text of the folder you deleted (it should be brown, not red if there aren't issues in SVN)
Исправить:
- forcefully kill the lock (or close the program so it releases the lock)
- run cleanup command on folder you deleted
- revert folder you deleted
- delete folder you deleted
- commit parent folder of folder you deleted
Другие советы
Я не уверен, в каком штате это сейчас, но ваша лучшая ставка, вероятно, будет:
- Переместите папку из своего репозитория полностью
- Делать
svn cleanup
- Делать
svn update
- Скопируйте файлы из папки назад (без файлов .svn) Перезапись старых исходных файлов, которые были просто SVN обновлены.
http://rubyjunction.us/subversion-hell-sh.
Редактировать
Вот сценарий Shell из ссылки, который может быть полезен для пользователей Linux / Unix ...
#!/bin/sh
if [ "" == "$1" ] ; then
echo "Usage: subversion-hell.sh A_PROJECT"
echo "A_PROJECT should be a Subversion folder you are having problems with,"
echo "and you should be in the folder above A_PROJECT"
fi
DIR=`pwd`
PWD=$DIR
DIR=`echo $DIR | sed s/^.*\\\/trunk/trunk/`
mkdir ~/tmp/ 2>/dev/null
rm -Rf ~/tmp/$1 2>/dev/null
mv ~/$DIR/$1 ~/tmp/
find ~/tmp/$1/ -iname '.svn*' -exec rm -Rf {} \; 2>/dev/null
cd $PWD
echo svn co YOUR_URL_HERE/$DIR/$1 $1
svn co YOUR_URL_HERE/$DIR/$1 $1
cp -Rf ~/tmp/$1/* $PWD/$1/
# YOUR_URL_HERE can be found by looking in file .svn/entries, near the top
У меня была та же проблема, когда пытался удалить ветку на Linux Enviroment. Что я сделал:
- SVN возврат ветки
- SVN вверх
- SVN Cleanup.
- SVN удалить ветвь - снова отметить ветку для удаления
- SVN CI.
Я не знаю, в чем проблема, но я пережил ее дважды через две недели.
Держите резервную копию папки, которую вы переместили. Теперь в SVN нажмите на TortoiseSVN >> разрешен. Выберите файлы / папку и разрешите. Теперь обновите / совершайте данные SVN.
Обратите внимание, что это может произойти даже если вы «ничего не делали» - то есть кто-то перемещается вокруг папок на вас в репозитории, и вы не знаете об этом. Случилось со мной. Если это так, удалите папку «Проблема» из своего репозитория и svn update
.
Конфликт дерева возникает, когда разработчик перемещался / переименован / удалил файл или папку, которую другой разработчик либо также переместил / переименован / удален или просто изменен. Существует много разных ситуаций, которые могут привести к конфликту дерева, и все они требуют разных шагов для разрешения конфликта.