pristine svn-base文件丢失

问题描述 投票:19回答:6

我正在尝试使用TortoiseSVN svn update我的SVN工作副本,但更新失败,要求先执行清理。

然而,svn cleanup失败了太多陈述\.svn\pristine\20\20long-namecbf.svn-base file cannot be found

我已经尝试释放锁,但这也不起作用。

知道我该怎么办?

svn tortoisesvn
6个回答
1
投票

您可以使用SmartSVN恢复丢失的原始文件。 下载并安装它。它不是免费的,但30天免费试用应足以修复您的存储库。 在SmartSVN中打开您的工作副本。要修复,请选择修改>验证管理区域... 请享用!


33
投票

这个问题:

找不到文件.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%值。


11
投票

我解决了这个问题

  1. 创建一个空文件/workingdirectory/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601800afd80009.svn-base
  2. 运行svn清理

8
投票

我通过用新签出的副本替换.svn目录而逃脱了。对我来说幸运的是,本地副本与repo的版本相同。如果不是这样的话,不确定会有什么影响。


3
投票

对我来说,文件在那里,但有(1)附加到名称。 (副本)ff4c7be3da460bb91144d6761cc5743536c983f4(1).svn-base

我删除了“(1)”并且清理运行得很好ff4c7be3da460bb91144d6761cc5743536c983f4.svn-base


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
© www.soinside.com 2019 - 2024. All rights reserved.