我正在尝试使用TortoiseSVN svn update
我的SVN工作副本,但更新失败,要求先执行清理。
然而,svn cleanup
失败了\.svn\pristine\20\20long-namecbf.svn-base file cannot be found
。
我已经尝试释放锁定,但这也不起作用。
知道我该怎么办?
答案 0 :(得分:32)
这个问题:
找不到文件.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%值,可以检查其是否失败。
答案 1 :(得分:10)
我通过
解决了这个问题创建一个空文件 /workingdirectory/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601800afd80009.svn-base
运行 svn cleanup
答案 2 :(得分:8)
我通过用新签出的副本替换.svn目录而离开了。对我来说幸运的是,本地副本与repo的版本相同。如果不是这样的话,不确定会有什么影响。
答案 3 :(得分:3)
对我来说,文件在那里但是(1)附加了名称。 (复印件) ff4c7be3da460bb91144d6761cc5743536c983f4(1).svn-base
我删除了&#34;(1)&#34;和清理运行良好 ff4c7be3da460bb91144d6761cc5743536c983f4.svn基
答案 4 :(得分:2)
您可以使用SmartSVN恢复丢失的原始文件。
下载并安装它。它不是免费的,但30天免费试用应足以修复您的存储库。
在 SmartSVN 中打开您的工作副本。要修复,请选择 修改 &gt; 验证管理区域...
享受!
答案 5 :(得分:0)
以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 least 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.match(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." % (10 - max_times)
print "last SVN output:"
print svn_output
答案 6 :(得分: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