如何修复SVN“工作副本文本库已损坏”?

时间:2010-11-05 09:16:03

标签: svn repository

在我的svn回购许多快乐的承诺之后,突然之间关系变得很糟糕...... svn翻了个盖子喊道:“工作副本文本库已损坏了!

导致这种情况的原因是什么?我该如何解决?

Working copy text base is corrupt
svn: Commit failed (details follow):
svn: Checksum mismatch for '~/blah/.svn/text-  base/sumonet.py.svn-base'; expected: '548b9bb4b24bc580ab8694c583b28013', actual: '8b2b3cf4615de3d8520ae4841b3b0a8b'

12 个答案:

答案 0 :(得分:34)

这是错误。

svn: E155017: Working copy text base is corrupt
svn: E200014: Checksum mismatch for text base of : '/home/.../exampleFileCorrupted.cpp'
....

为我平稳工作的明确解决方案:

注意: 将您的文件复制到SVN环境之外的其他文件中。

cp exampleFileCorrupted.cpp ~/Desktop/

然后按照以下说明:

  1. cd到您拥有已损坏文件的路径 (后面指出的那个: 的文本库的校验和不匹配)
  2. svn rm --force exampleFileCorrupted.cpp

    您将看到:D exampleFileCorrupted.cpp

  3. 使用以下内容复制您在中的SVN文件夹中的第1点之前保存的文件:

    cp ~/Desktop/exampleFileCorrupted.cpp .

  4. (不要错过最后一点,这意味着在这里复制')

    1. 使用svn add exampleFileCorrupted.cpp

      添加到svn

      您将看到:exampleFileCorrupted.cpp

    2. 提交更改svn commit -m "Commit Message"

    3. 如果这有帮助,请告诉我。

答案 1 :(得分:16)

这对我有用:

svn rm --keep-local THE_CORRUPTED_FILE
svn add THE_CORRUPTED_FILE
svn ci

此致

答案 2 :(得分:15)

只需单独进行新的结帐,然后将您在旧工作副本中所做的更改复制到新的工作副本中。

答案 3 :(得分:15)

  1. 在其他地方复制有问题的文件,
  2. 删除并提交存储库中的文件,
  3. 将您的文件复制到SVN并提交

答案 4 :(得分:7)

对于较新的subversion版本,没有.svn/text-base/目录。 .svn存储在.svn/pristine下的工作根目录中,错误消息如下所示:

Sending        README
Transmitting file data .svn: E155017: Commit failed (details follow):
svn: E155017: Working copy text base is corrupt
svn: E200014: Checksum mismatch for text base of '/home/user/tmp/svntest/README':
   expected:  1f9167bc01e5bc9bfcb928ff03d6700a
     actual:  e0a1692ff5cab91e3e3a0d02dabe0251

svn: E200003: Delta source ended unexpectedly

您可以使用https://gist.github.com/siddhadev/5814802处的bash脚本来修复它。 它将用一个新的文件替换损坏的svn-base文件。

答案 5 :(得分:3)

@siddhadev脚本应该适用于那些喜欢手动执行的人:

  1. 将有问题的文件的最新版本导出为lastworkingrev.txt
  2. 使用sha1sum lastworkingrev.txt
  3. 获取sha1校验和
  4. 使用find . -name "SHA1_CHECKSUM.svn-base"查找subversion pristine文件,并使用lastworkingrev.txt
  5. 的内容覆盖它
  6. 提交

答案 6 :(得分:2)

我遇到了同样的问题但以前的答案都没有帮助。就我而言,Subversion存储库版本为1.6,但我允许IntelliJ在版本1.7中签出。除了" svn:E200014:基本校验和不匹配之外,没有任何版本不匹配的迹象"错误。 只需使用正确的版本检出新树即可解决问题。

答案 7 :(得分:0)

做一个SVN清理小组 - >清理。

答案 8 :(得分:0)

使用https://github.com/jasperlee108/svndumpfilterIN

过滤转储后出现此问题

已修复删除md5校验和...

sed -i '/Text-copy-source-md5/d' eias_only.dmp

然而,可能会有一些后果......

答案 9 :(得分:0)

删除现有副本并重新检查您的问题将得到解决。

答案 10 :(得分:0)

我尝试了以上所有内容,清理无效。 SVN建议我签出一份新副本。但是这个项目太大了,我改变了太多的代码,比较会花费很多时间。 这是我解决问题的方法,每次更改都保留。

  1. 删除所有 .svn 文件夹。此文件夹可能存在一个或多个取决于SVN的版本。找到每一个并删除它。
  2. 签出工作文件夹。它将提醒“不是空文件夹”,单击“是”。然后恢复工作副本。

答案 11 :(得分:0)

我已经学会了不相信我的工作目录受版本控制。当我准备提交时,我会执行递归diff并将更改复制到签出目录中。这样,如果SVN窒息,我所做的只是rm -Rf结账并进行新的结账,然后重复复制命令。

我没有来这里寻找解决方案。我来找这个片状行为的原因并没有发现任何东西。即使我是唯一一个使用分支并从命令行执行所有操作的人,也是如此,我比Eclipse或任何其他界面更信任。