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_Visualsvn Server_Visualsvn_Fsfs - Fatal编程技术网

处理多年期间发生的多起svn腐败事件

处理多年期间发生的多起svn腐败事件,svn,version-control,visualsvn-server,visualsvn,fsfs,Svn,Version Control,Visualsvn Server,Visualsvn,Fsfs,首先,我已经阅读了关于处理看似相对较小的SVN腐败的各种帖子。我之所以发布这篇文章,是因为我们担心,腐败的绝对数量意味着我们的方法存在缺陷,或者说,导致成功的恢复选项更加有限 我们目前正在运行一个VisualSVN 2.1.3存储库(SVN 1.6.12),该存储库大约有8年历史,在windows文件共享上运行了大约50000个修订版,以支持FSFS。根据VSVN历史,存储库的早期部分很可能是在VSVN的早期版本上运行的,因为最早的版本早于当前运行的版本发布日期 存储库有许多子项目。人们倾向于在

首先,我已经阅读了关于处理看似相对较小的SVN腐败的各种帖子。我之所以发布这篇文章,是因为我们担心,腐败的绝对数量意味着我们的方法存在缺陷,或者说,导致成功的恢复选项更加有限

我们目前正在运行一个VisualSVN 2.1.3存储库(SVN 1.6.12),该存储库大约有8年历史,在windows文件共享上运行了大约50000个修订版,以支持FSFS。根据VSVN历史,存储库的早期部分很可能是在VSVN的早期版本上运行的,因为最早的版本早于当前运行的版本发布日期

存储库有许多子项目。人们倾向于在子树上工作,而不是在整个回购协议上工作

在升级一些内部工具和基础设施的过程中,我们遇到了各种行业标准工具,这些工具报告回购协议上遗漏的后续换行问题,除非我们将其限制在最近1500次左右的修订。需要注意的是,在我们运行这些工具之前,没有任何迹象表明开发团队每天都会遇到任何问题

因此,我们开始运行svnadmin verify,它立即将第3次提交视为无效,并将第4次和第11次提交视为无效,依此类推。在尝试手动查找好的地方一段时间后,我们编写了一个脚本,在每个单独的修订版上调用svnadmin verify-rx

最后,它报告说,我们的提交中有1000多个是不可验证的(我们意识到,一个错误的修订也将迫使任何受影响文件的下一个修订也是不可验证的,至少是损坏计数的两倍)。从8年前到6年前(过去2年中有一次错误的犯罪行为),腐败事件分散在时间线的大部分区域

  • 对于大多数情况下似乎正在运行的存储库来说,这似乎相当高——我们的验证计划中是否存在缺陷
  • 假设不是,这似乎是一个很高的数字,而且我们能找到的关于这个主题的唯一文章暗示大提交可能是一个问题,但我们似乎有一个比大提交更频繁的问题
  • 在这一点上,我们只完成了验证阶段,以确定错误的修订,但还不清楚哪些代码受到影响。可能所有的腐败都发生在死项目/分支上,也可能不是

    我们希望根据损坏的数量/存储库的大小来确定推荐哪种方法。所有恢复选项包括升级到更新的VSVN版本和改进我们的SVN维护实践

    选项A-增量转储/加载/比较-现在我们已经确定了所有错误的修订,我们可以跳过错误的修订进行增量转储。然后我们可以将这个转储加载到一个新的回购协议中,svn diff这两个回购协议,看看有什么不匹配,并修补剩余的差异。我们可能会丢失一些历史记录,但根据腐败的具体情况,我们可能会手动修补大量文件,也可能很少修补,这取决于这些文件是否相关。但是有很多手工工作

    选项B-导出/导入-尝试将当前修订的回购协议导出为新的回购协议,丢失所有历史记录。他仍然会做一个理智的比较,但不会预期有太多的差异

    选择C


    谢谢大家!

    产生
    svnadmin:E160004:Revision文件(rREVNUM)缺少尾随换行符的那些修订已损坏。我猜他们的修订文件是完全空的(是吗?)。如果没有用于恢复这些修订的备份,则必须修复存储库

    定期验证存储库并实施 可靠的备份。为了涵盖这些任务并帮助Subversion管理员,最新版本—VisualSVN Server 3.6—引入了一个

    为Subversion存储库设置定时存储库备份和验证只需几分钟。有关分步说明,请参阅文章

    选项A-增量转储/加载/比较

    这种方法应该有效。但是,您不应跳过这些已损坏的修订,而应将其替换为空修订。此步骤对于确保存储库中的修订编号不会因修复而发生变化非常重要

    顺便说一句,您确实检查了存储库中的磁盘是否存在故障,对吗?如果还没有,请运行
    chkdsk
    或类似工具

    选项B-导出/导入

    先试试A选项。您很有可能会替换那些损坏的修订并成功修复存储库



    重要提示:VisualSVN Server 2.1.x版本系列非常过时,并且VisualSVN Server 2.1.x不再接收修补程序更新或安全修补程序。我们建议所有VisualSVN服务器用户更新到最新的VisualSVN服务器3.6版本。升级前请阅读本文。

    生成
    svnadmin:E160004:Revision file(rREVNUM)缺少尾随换行符的修订版已损坏。我猜他们的修订文件是完全空的(是吗?)。如果没有用于恢复这些修订的备份,则必须修复存储库

    定期验证存储库并实施 可靠的备份。为了涵盖这些任务并帮助Subversion管理员,最新版本—VisualSVN Server 3.6—引入了一个

    为Subversion存储库设置定时存储库备份和验证只需几分钟。有关分步说明,请参阅文章

    选项A-增量转储/加载/比较

    这种方法应该有效。但是,您不应该跳过那些被破坏的修订,而应该将它们替换为一个空版本