我重建了一个巨大的svn仓库(超过350GB-花费了11天以上才能完成)。 如何验证新的存储库与现有存储库相同。 我尝试在两者上使用“svn ls”,它们是相同的-但这只是转储根目录。 是否有更好的方法来做到这一点,还是我只需要进行随机测试? FYI,存储库具有600K多个修订版本和16K+个根目录中的文件夹。
我重建了一个巨大的svn仓库(超过350GB-花费了11天以上才能完成)。 如何验证新的存储库与现有存储库相同。 我尝试在两者上使用“svn ls”,它们是相同的-但这只是转储根目录。 是否有更好的方法来做到这一点,还是我只需要进行随机测试? FYI,存储库具有600K多个修订版本和16K+个根目录中的文件夹。
svn ls -R 会列出每个文件夹,而不仅仅是根目录。但这并不能保证显示的内容是真实有效的。
你应该做的一件事是将两个仓库的所有内容都检出到两个干净的目录中,并对这两个目录树进行递归比较(当然要排除 .svn 子文件夹)。如果您需要关于最后一步的建议,请告诉我们您正在使用哪个操作系统。
这当然不能检查版本历史,但至少保证没有缺失任何来自 head 版本的内容。
为了对版本历史进行一些选择性检查,可以检出一些旧的版本(例如一些已标记的版本),并按照上述方式进行比较。
diff -r Repos1 Repos2
除了新版本之外,结果应该为空...
或者您可以执行第二个svnadmin dump Repos2 >repos2.dump,并将其与用于创建此文件的文件进行比较。结果应该是完全相同的...(除了新版本)...
或编写一个脚本,从两个存储库中检出一定数量(或全部)的版本,并在那个级别上进行比较...但我认为这需要更多时间...
我想要类似的东西来验证一个svn仓库与其svnadmin sync克隆副本仓库是否一致。对于每个修订号$r=1(或0)到HEAD(svnlook youngest),我执行了以下操作:
svnadmin dump -q --incremental --deltas -r $r /path/to/repo1 > source.txt
svnadmin dump -q --incremental --deltas -r $r /path/to/repo2 > target.txt
diff --text --ignore-matching-lines='^\(UUID: [0-9a-f-]\+\|Prop-delta: true\|Prop-content-length: [0-9]\+\|Content-length: [0-9]\+\|PROPS-END\|\s*\)$' source.txt target.txt