VisualSVN(Tortoiseを使用)を使用しています。誤ってフォルダーを別の場所に移動しました。それを元に戻そうとすると、SVNはこのエラーでpukeします。これは以前に1回発生したもので、自分が何をしているのかわからないまま、ランダムな更新/コミットをなんとかして行うことができ、「修正」されました。同じ魔法を再び引くことはできないので、ファイルとディレクトリ、およびツリーの競合を取得する方法を知る必要があります。
ありがとう!
同じエラー(ツリーの競合)がありましたが、ワークフローが異なります。
ロックされているプロセスを見つけます。 Handle.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
http://rubyjunction.us/Subversion-hell-sh
編集
リンクからのシェルスクリプトは次のとおりです。これは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環境でブランチを削除しようとしたときにも同じ問題が発生しました。私がしたことは:
何が問題だったかはわかりませんが、2週間に2回経験しました。
これは、「何もしなかった」場合でも発生する可能性があることに注意してください。つまり、誰かがリポジトリ内のあなたのフォルダを移動し、それを知らない場合です。私に起こりました。この場合は、リポジトリから問題のフォルダを削除し、svn update
。
ツリーの競合は、開発者がファイルまたはフォルダを移動/名前変更/削除したときに発生します。別の開発者もファイル/フォルダを移動/名前変更/削除したか、変更しただけです。ツリーの競合を引き起こす可能性のあるさまざまな状況があり、それらすべてが競合を解決するために異なる手順を必要とします。
移動したフォルダのバックアップを保管してください。 SVNで、TortoiseSVN >>解決済みをクリックします。ファイル/フォルダーを選択して解決します。ここで、svnデータを更新/コミットします。