恢复svn – 恢复个别修订

无论我如何到达这里,我都处于从备份恢复SVN存储库的位置.不幸的是,备份稍有损坏,超过19000次修订,大约80次丢失.备份是一个bzip2文件,我能够使用bzip2recover来恢复大约99%的块.这些都是“已知好”,因为它们成功解压缩.

因此,我能够创建一个已知良好的提交列表,并丢失提交.

原始存储库也已损坏,但许多文件仍然存在.不幸的是,存储库作为一个整体被破坏了.

所以我很幸运能够获得原始db / revs和db / revprops目录中的文件以获取这些缺失的修订版本.可能性是备份bz2文件的损坏与db / revs文件的损坏不一致.

我已经重建了r13892的所有内容,但我知道r13893已损坏所以我没有r13893的转储.我从原始存储库中获得了db / revs / 13893和db / revprops / 13893文件.

我使用svn-1.4创建并重建了存储库,但是我升级到svn-1.6,以便我可以使用选择性svnadmin verify命令(在单个或一系列提交上).

我想也许我可以把这两个文件放到新的存储库中,更新db / current [1]然后继续.但是,当我尝试验证时,我收到此错误:

$svnadmin verify new-svn
* Verified revision 1.
...
* Verified revision 13889.
* Verified revision 13890.
* Verified revision 13891.
* Verified revision 13892.
svnadmin: Can't read file 'svn/db/revs/13214': End of file found

所以这显然不起作用.不知道13214与这里有什么关系.

我降级回svn-1.4.6,以防万一发生奇怪的1.6.不幸的是我得到了相同的结果 – 修订版13893没有验证:

...
* Verified revision 13891.
* Verified revision 13892. svnadmin: Can't read file 'svn/db/revs/13214':
End of file found

所以这就是我所知道的:

>我知道修订版1到13892是100%正确的(除非bz2块不正确地解压缩但通过校验和的可能性非常小).
>我不知道原始SVN存储库中的r13893文件是否正常 – 它们可能已损坏,但损坏程度非常小,不太可能(但可能).

有没有人有任何想法我怎么能填补这个洞?请注意,我拥有100%自信的r13894,所以如果我能插入r13893,我可以继续进行其余的恢复.

[1]我用这个脚本更新了db / current:
http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py

我在其他一些SVN存储库上测试了这个(在禁用对db / current的写入之后!)以验证它是否产生了与那里已有的相同的值.确实如此.

最佳答案 关于这个:

svnadmin: Can't read file 'svn/db/revs/13214': End of file found

我怀疑rev 13893引用了rev 13214中的内容(例如文件副本或skip-rev之类的东西).

在执行svn加载时,新版本是否与原始版本匹配?我记得遇到一个案例,我的转储引用了转速0,它被加载为转速1.如果这样的事情发生在这里,转向13214的反向引用将被关闭.

您可以尝试使用repo db中的文件以转储格式创建缺少的rev.不幸的是,我不知道会有这样的工具.但我建议看看SvnDumpTool;它能够以很多有用的方式操纵svn转储.

披露:我过去曾为svndumptool做出过贡献

点赞