我正在尝试svn update
使用 TortoiseSVN 对我的 SVN 工作副本,但更新失败,要求先执行清理。
但是,svn cleanup
失败也表明\.svn\pristine\20\20long-namecbf.svn-base file cannot be found
.
我已经尝试释放锁,但这也不起作用。
知道我应该如何进行吗?
我正在尝试svn update
使用 TortoiseSVN 对我的 SVN 工作副本,但更新失败,要求先执行清理。
但是,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
运行svn 清理
我通过用刚签出的副本中的相同目录替换 .svn 目录而逃脱了。对我来说幸运的是,本地副本与 repo 的修订版相同。如果不是这种情况,不确定会产生什么影响。
对我来说,文件在那里,但在名称后面附加了 (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