24

TortoiseSVNを使用してSVN作業コピーを作成しようとしsvn updateていますが、更新が失敗し、最初にクリーンアップを実行するように求められます。

しかし、svn cleanup失敗しすぎて、それを述べてい\.svn\pristine\20\20long-namecbf.svn-base file cannot be foundます。

私はすでにロックを解除しようとしましたが、これも機能しません。

どのように進めればよいのでしょうか?

4

7 に答える 7

43

この問題:

ファイル.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%値を生成します。

于 2013-07-23T03:07:45.040 に答える
14

私はこれを解決しました

  1. 空のファイルを作成する/workingdirectory/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601800afd80009.svn-base

  2. svncleanupを実行します

于 2017-03-26T22:12:05.773 に答える
8

.svnディレクトリを新しくチェックアウトしたコピーからの同じものに置き換えることで逃げました。私にとって幸いなことに、ローカルコピーはリポジトリと同じリビジョンでした。そうでない場合の影響はわかりません。

于 2013-02-01T06:44:57.743 に答える
3

私の場合、ファイルはそこにありましたが、名前に(1)が追加されていました。(コピー)ff4c7be3da460bb91144d6761cc5743536c983f4(1).svn-base

「(1)」を削除し、クリーンアップが正常に実行されましたff4c7be3da460bb91144d6761cc5743536c983f4.svn-base

于 2014-08-03T13:41:37.050 に答える
1

誰かが興味を持った場合に備えて、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
于 2019-02-28T15:25:23.973 に答える
0

SmartSVNを使用して、失われた元のファイルを復元できます。
ダウンロードしてインストールします。無料ではありませんが、リポジトリを修復するには30日間の無料トライアルで十分です。 SmartSVN
で作業コピーを開きます。修復するには、[変更]>[管理領域の検証...]を選択します楽しみ ください。

于 2012-10-02T07:25:55.697 に答える
0

これはワンライナーとしてもそれを行います:

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
于 2020-04-18T18:05:50.113 に答える