TortoiseSVNを使用してSVN作業コピーを作成しようとしsvn update
ていますが、更新が失敗し、最初にクリーンアップを実行するように求められます。
しかし、svn cleanup
失敗しすぎて、それを述べてい\.svn\pristine\20\20long-namecbf.svn-base file cannot be found
ます。
私はすでにロックを解除しようとしましたが、これも機能しません。
どのように進めればよいのでしょうか?
TortoiseSVNを使用してSVN作業コピーを作成しようとしsvn update
ていますが、更新が失敗し、最初にクリーンアップを実行するように求められます。
しかし、svn cleanup
失敗しすぎて、それを述べてい\.svn\pristine\20\20long-namecbf.svn-base file cannot be found
ます。
私はすでにロックを解除しようとしましたが、これも機能しません。
どのように進めればよいのでしょうか?
この問題:
ファイル.svn\pristine \ 24\24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-baseが見つかりません
他のファイルからsvn-baseをコピーし、これの名前を24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-baseに変更しました。そして、クリーンアップ操作を実行します。その後、行方不明の別のファイルに遭遇しました。同じ方法で、ついにこの問題を修正しました。
SilkSVNがインストールされているWindowsコマンドラインから:
cd project directory
svn status
これによりエラーが発生します。ディレクトリとファイル名のテキストを選択してコピーし、貼り付けます。
echo > .svn\pristine\<paste>
例えば:
echo > 24\24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-base
この知識があれば、これらの問題をすべての人に自動的に修正できるバッチファイルを作成するのはかなり簡単です。svnコマンドは、失敗をチェックできる%ERRORLEVEL%値を生成します。
私はこれを解決しました
空のファイルを作成する/workingdirectory/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601800afd80009.svn-base
svncleanupを実行します
.svnディレクトリを新しくチェックアウトしたコピーからの同じものに置き換えることで逃げました。私にとって幸いなことに、ローカルコピーはリポジトリと同じリビジョンでした。そうでない場合の影響はわかりません。
私の場合、ファイルはそこにありましたが、名前に(1)が追加されていました。(コピー)ff4c7be3da460bb91144d6761cc5743536c983f4(1).svn-base
「(1)」を削除し、クリーンアップが正常に実行されましたff4c7be3da460bb91144d6761cc5743536c983f4.svn-base
誰かが興味を持った場合に備えて、chunguiwの答えを受け取り、Python(2.7)スクリプトを作成しました。
手順に従います。クリーンアップを試し、出力を解析し、不足しているファイルをタッチして、完了するまで繰り返します。
import os
import sys
import subprocess
import re
def touch(fname, times=None):
with open(fname, 'a'):
os.utime(fname, times)
svnbase_regex = re.compile(r"svn: E720002: Can't open file \'([^']+)\':")
if __name__ == "__main__":
# Can pass SVN working copy's root folder as a parameter, otherwise runs on CWD
try:
root_folder = sys.argv[1]
except IndexError:
root_folder = "."
root_folder = os.path.abspath(root_folder)
os.chdir(root_folder)
count = max_times = 10
# Repeats file touching at most N times (the number above)
while count > 0:
count -= 1
try:
svn_output = subprocess.check_output("svn cleanup", stderr=subprocess.STDOUT)
except subprocess.CalledProcessError, e:
svn_output = e.output
regex_match = svnbase_regex.search(svn_output)
if not regex_match:
break
touch(regex_match.group(1))
print "Done %s" % regex_match.group(1)
print "Exited, fixed up %s missing entries." % (max_times - count)
print "last SVN output:"
print svn_output
SmartSVNを使用して、失われた元のファイルを復元できます。
ダウンロードしてインストールします。無料ではありませんが、リポジトリを修復するには30日間の無料トライアルで十分です。
SmartSVN
で作業コピーを開きます。修復するには、[変更]>[管理領域の検証...]を選択します。お楽しみ
ください。
これはワンライナーとしてもそれを行います:
while [ 1 ] ; do OUTPUT=`svn cleanup 2>&1 | sed 's/^.* open file //' | sed 's/:.*$//' | sed "s/'//g"`;if [ "X${OUTPUT}" == "X" ] ; then break; fi; echo $OUTPUT;touch $OUTPUT;done