【问题标题】:How do I fix SVN 'Working copy text base is corrupt'?如何修复 SVN '工作副本文本库已损坏'?
【发布时间】:2010-11-05 09:16:02
【问题描述】:

在我对我的 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'

【问题讨论】:

  • 我已重命名文件夹中的文件,然后单击“更新”按钮(因此,从 SVN 中删除了文件),然后重命名并提交该文件,就像一个新文件一样。
  • 在我的情况下,这种情况是由防病毒程序的误报引起的,该程序默默地删除了我编译的“受感染”可执行文件。

标签: svn repository


【解决方案1】:

这是错误。

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 到损坏文件所在的路径 (即后面的内容:Checksum mismatch for text base of
  2. svn rm --force exampleFileCorrupted.cpp

    你会看到:D exampleFileCorrupted.cpp

  3. 将第 1 点之前保存的文件复制到您所在的 SVN 文件夹中

    cp ~/Desktop/exampleFileCorrupted.cpp .

(不要错过最后的意思,即“复制到这里”)

  1. 添加到 svn with : svn add exampleFileCorrupted.cpp

    你会看到:一个exampleFileCorrupted.cpp

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

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

【讨论】:

  • 赞成,因为这很有效,并且比任何一个排名较高的答案都明显更好。因为这样的问题不得不吹掉一个 repo 目录并重新开始是很烦人的,所以接受的答案实际上是一个糟糕的“解决方案”。所以这个答案更好,你最终只有一次提交,就像没有出错一样。
  • 如果“rm”不起作用,请尝试:“svn delete --force exampleFileCorrupted.cpp”。
  • 为我工作!很好的解决方案。
【解决方案2】:

这对我有用:

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

【讨论】:

  • 简单有效,应该是最佳答案
  • 非常感谢!
  • 请注意,该文件将具有特殊属性 - “替换”。它的状态不会只是“修改”,而是“替换”。
  • 这应该是迄今为止最好的答案。
  • 这会删除更改历史记录吗?
【解决方案3】:

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

【讨论】:

  • 这种事情让我想把svn抛在后面,转而使用mercurial或git。
  • 签出一份新副本,然后用我刚刚签出的文件覆盖损坏的文件 (*.svn-base) 也可以。
  • 如果您有许多更改的文件,您可以从旧的工作副本/备份位置进行 rsync:rsync -av --delete-during --exclude ".svn" .
  • 这种事情就是为什么我把 svn 抛在脑后,搬到了 git 上。
  • 这对于大型 repo 或许多更改来说太过分了。您所要做的就是复制受影响的文件,然后 svn --force 删除受影响的文件,提交,svn 添加副本,提交,完成。有关具体步骤,请参阅其他回复。
【解决方案4】:
  1. 将有问题的文件复制到其他地方,
  2. 删除并提交存储库中的文件,
  3. 将文件复制到 SVN 并提交

【讨论】:

  • 这并没有为我解决,我不得不替换颠覆原始文件。 (见我和@siddhadev 的答案)
  • 这是唯一对我有用的解决方案。我尝试了其他方法无济于事。
  • @MichaelEakins 我第二,这是一个令人讨厌的错误。我只认真使用过 Surround 和 TFS,它们似乎都比 SVN 好。
  • 对我没用。恢复有问题的文件并提交作品。但是一旦我复制回有问题的文件并再次尝试提交,就会再次抛出相同的错误。
  • @tanayamitshah 如果这是文本文件,可能会尝试仅复制文件的内容 (ctrl+c, ctrl+v)
【解决方案5】:

对于较新的 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 文件。

【讨论】:

    【解决方案6】:

    @siddhadev 脚本应该可以工作,但对于喜欢手动执行的人来说:

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

    【讨论】:

      【解决方案7】:

      我遇到了同样的问题,但以前的答案都没有帮助。在我的例子中,Subversion 存储库的版本是 1.6,但我允许 IntelliJ 在版本 1.7 上签出。除了“svn: E200014: Base checksum mismatch”错误之外,没有任何版本不匹配的迹象。 只需检查具有正确版本的新树即可解决问题。

      【讨论】:

        【解决方案8】:

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

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

        【讨论】:

          【解决方案9】:

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

          我不是来这里寻找解决方案的。我来寻找这种片状行为的原因,但一无所获。即使我是唯一一个使用分支并从命令行执行所有操作的人也会发生这种情况,我比 Eclipse 或任何其他界面更信任命令行。

          【讨论】:

            【解决方案10】:

            做一个 SVN 清理团队->清理。

            【讨论】:

            • 或者在命令行中,简单的 'svn cleanup'。不幸的是,这并没有解决我的问题:(
            【解决方案11】:

            https://github.com/jasperlee108/svndumpfilterIN过滤我的转储后遇到这个问题

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

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

            但是,可能会有一些后果......

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-06-23
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多