1

我今天遇到了一个损坏的存储库的问题。

svn log 给了我“格式错误的文件”错误,即使 svnadmin verify 说一切正常。

当您的源历史记录消失时总是很糟糕,所以我也会发布一个答案,以防它帮助某人。

4

2 回答 2

3

备份您的存储库!

  • 运行“svnadmin 转储 REPOSPATH > nul”

注意它能够转储的最后一个版本(例如 99),下一个版本有错误(例如 100)。

  • 从 REPOSPATH\db\revprops 打开错误的修订版道具。

如果它包含垃圾或 NUL,您可以修复它:

  • 将之前的道具(99)复制到坏的道具(100)上
  • 打开更正的道具,将日期设置为合理的值(除非您知道文件格式,否则不要编辑其他任何内容)

再次运行“svnadmin dump REPOSPATH > nul” - 它应该完成且没有错误

于 2010-12-10T10:03:28.060 回答
0

@laktak 的解决方案在大多数情况下在道具损坏时有效,但在 @jgifford25 指出的实际 rev 文件时无效。

一个理想的解决方案是:

  1. 按照@laktak 的建议识别损坏的更改,比如说 100
  2. 将转储直到从一开始的最后一个有效版本作为备份,或者如果您有备份直到有效修订版,则跳过此操作。
    svnadmin dump /path/to/currentrepo -r 0:99 --incremental > svnbackuptillvalid
  1. 对修订版 100 之后提交的版本进行第二次备份,直到头(如果有的话,如果您确定损坏后没有提交,请跳过此步骤)。
   svnadmin dump /path/to/currentrepo -r 101:HEAD --incremental > svnbackupafterinvalid
  1. 现在创建一个新的存储库
    svnadmin create /path/to/newrepo
  1. 将有效的修订备份恢复到新的 repo
    svnadmin load /path/to/newrepo < svnbackuptillvalid

与团队共享新的 Repo URL 或删除现有的 repo 并使用相同的路径。

此外,您可以添加在无效修订后提交的有效变更集。

    svnadmin load /path/to/newrepo < svnbackupafterinvalid
于 2019-10-04T15:53:07.960 回答