Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVN";格式不正确的文件;损坏的存储库_Svn_Version Control_Corruption - Fatal编程技术网

SVN";格式不正确的文件;损坏的存储库

SVN";格式不正确的文件;损坏的存储库,svn,version-control,corruption,Svn,Version Control,Corruption,我今天遇到了一个存储库损坏的问题 svn日志给了我“格式错误的文件”错误,尽管svnadmin verify说一切正常 当您的源历史记录消失时,它总是很糟糕,因此我也会发布一个答案,以防它对某人有所帮助。备份您的存储库 运行“svnadmin dump REPOSPATH>nul” 请注意,它能够转储的上一个版本(例如99),下一个版本有错误(例如100) 从REPOSPATH\db\revprops打开错误的修订道具 如果它包含垃圾或NUL,您可以修复它: 复制之前的道具(99)而不

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

svn日志给了我“格式错误的文件”错误,尽管svnadmin verify说一切正常


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

备份您的存储库

  • 运行“svnadmin dump REPOSPATH>nul”
请注意,它能够转储的上一个版本(例如99),下一个版本有错误(例如100)

  • 从REPOSPATH\db\revprops打开错误的修订道具
如果它包含垃圾或NUL,您可以修复它:

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

再次运行“svnadmin dump REPOSPATH>nul”-在大多数情况下,当道具损坏时,它应该会无错误地完成

@laktak的解决方案工作,但当@jgifford25指出的实际版本文件损坏时,则不会

理想的解决方案是:

  • 按照laktak的建议识别损坏的更改,比如100
  • 将dump作为备份,直到从一开始只有最后一个有效版本,或者如果您有备份,则跳过此备份,直到有效版本
  • 对修订版100后提交的版本进行第二次备份,直到head(只有在有备份的情况下,如果您确定损坏后没有提交,请跳过此备份)
  • 现在创建一个新的存储库
  • 将有效版本备份还原到新的repo
  • svnadmin load/path/to/newrepo
    与团队共享新回购URL或删除现有回购并使用相同路径

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

        svnadmin load /path/to/newrepo < svnbackupafterinvalid
    
    svnadmin load/path/to/newrepo
    情况并非总是如此。有时损坏的不是revprops,而是实际的rev文件。在损坏的版本上复制上一版本并不能解决此问题。正如您所指出的,良好的备份可以解决此问题。我还保存了我的bacon,因为每次提交都会创建一个增量转储。@jgifford25当然,这可能对每个人都没有帮助,但我发布了它,因为这是一个在web上其他任何地方都没有提到的简单修复。
       svnadmin dump /path/to/currentrepo -r 101:HEAD --incremental > svnbackupafterinvalid
    
        svnadmin create /path/to/newrepo
    
        svnadmin load /path/to/newrepo < svnbackuptillvalid
    
        svnadmin load /path/to/newrepo < svnbackupafterinvalid