2010-11-05 126 views
27

许多快乐提交到我的svn的后,所有的突然的关系就变坏...... 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' 
+0

我已经改名为我的文件夹中的文件,然后点击“更新”按钮(这样,删除了SVN文件),然后改名回COMMITED该文件,如新。 – 2015-05-10 15:32:14

回答

30

这是错误。

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. 光盘中,你有损坏的文件的路径 (这是一个后表示:校验和不匹配的文本库)
  2. svn rm --force exampleFileCorrupted。CPP

    您将看到:d exampleFileCorrupted.cpp

  3. 复制你在SVN文件夹中的第1点你是在与以前保存的文件:

    cp ~/Desktop/exampleFileCorrupted.cpp .

(不要错过末尾的意思是'复制在这里')

  1. 添加到svn的有:svn add exampleFileCorrupted.cpp

    你会看到:一个exampleFileCorrupted.cpp

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

让我知道,如果这有助于。

+2

Upvote因为这个工程,并且是一个明显更好的解决方案比任何一个更高的排名答案。令人讨厌的是不得不吹掉回购目录并重新开始,因为这样的问题,所以接受的答案实际上是一个可怕的“解决方案”。所以这个答案是更好的,你最终只有一个提交,就好像什么都没有出错。 – user62177541 2016-06-10 03:54:40

+0

尝试:“svn delete --force exampleFileCorrupted.cpp”if“rm” 。!不起作用 – namar0x0309 2017-01-04 05:10:50

+1

为我工作的最佳解决方案 – Rajesh 2017-01-25 10:03:52

13

只要做一个单独的新结帐,并将您在旧的工作副本中所做的更改复制到新的。

+33

这种事情让我想离开svn并转向mercurial或git。 – 2010-11-05 18:29:45

+5

检出一个新的副本,然后用刚才检出的那个覆盖损坏的文件(* .svn-base)也可以。 – 2012-08-20 17:27:13

+0

如果您有许多已更改的文件,您可以从旧的工作副本/备份位置rsync:rsync -av --delete-during --exclude“.svn”<备份位置>。 – 2014-10-09 05:58:18

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 

你可以使用bash脚本在https://gist.github.com/siddhadev/5814802修复它。 它会用新鲜的一个替换损坏的svn-base文件。在其他地方

15
  1. 复制问题的文件,
  2. 删除,并承诺在库文件,
  3. 您的文件复制到SVN并提交
+0

这没有解决它,我不得不取代颠覆原始文件。 (请参阅我的和@siddhadev答案) – 2013-10-29 09:44:01

+1

这是唯一对我有用的解决方案。我尝试了其他人无济于事。 – 2014-02-02 15:58:06

+0

@MichaelEakins我第二,那是一个讨厌的错误。我只使用过Surround和TFS,他们都比SVN好。 – goamn 2014-05-05 01:05:27

3

@siddhadev脚本应该工作,但对于那些谁喜欢手动操作:

  1. 导出问题文件的最新版本为lastworkingrev.txt
  2. 获取与sha1sum lastworkingrev.txt
  3. SHA1校验找到颠覆原始文件,find . -name "SHA1_CHECKSUM.svn-base"并与lastworkingrev.txt
  4. 内容覆盖它提交
-1

做一个SVN清理Team->清理。

+0

或者在命令行中,只需'svn cleanup'。不幸的是,这并没有为我解决这个问题:( – siliconrockstar 2015-02-09 20:52:59

2

我有同样的问题,但以前的答案都没有帮助。在我的情况下,Subversion版本库的版本是1.6,但是我已经允许IntelliJ在版本1.7上签出。除了“svn:E200014:Base checksum mismatch”错误之外,没有发现版本不匹配的迹象。 只需检查具有正确版本的新树就可以解决问题。

0

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

12

这个工作对我来说:

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

问候,

+3

简单有效的,应该是最多的回答 – 2017-05-02 16:30:28

+0

谢谢你这么多 – geckos 2017-06-02 02:40:22

+0

注意的是,文件将具有特殊的属性 - !“更换”它的地位也不会只是“修改”,而不会被“替换”。 – 2017-06-15 07:28:28

0

我什么都试过以上,清理不工作。 SVN推荐我签出一份新的副本。但是这个项目太大了,我修改了太多的代码,比较会花费很多时间。 下面是我解决问题的方法,每次更改都会保留。

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

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

我不是来这里寻找一个解决方案。我来找这种片状行为的原因,什么都没发现。即使我是唯一使用该分支并从命令行执行所有任务的人,我比Eclipse或其他任何接口都更信任它。