如何验证重建的svn仓库

3

我重建了一个巨大的svn仓库(超过350GB-花费了11天以上才能完成)。 如何验证新的存储库与现有存储库相同。 我尝试在两者上使用“svn ls”,它们是相同的-但这只是转储根目录。 是否有更好的方法来做到这一点,还是我只需要进行随机测试? FYI,存储库具有600K多个修订版本和16K+个根目录中的文件夹。

4个回答

1
你可以将每个仓库的日志转储到一个文件中,然后比较这些日志文件。

1

svn ls -R 会列出每个文件夹,而不仅仅是根目录。但这并不能保证显示的内容是真实有效的。

你应该做的一件事是将两个仓库的所有内容都检出到两个干净的目录中,并对这两个目录树进行递归比较(当然要排除 .svn 子文件夹)。如果您需要关于最后一步的建议,请告诉我们您正在使用哪个操作系统。

这当然不能检查版本历史,但至少保证没有缺失任何来自 head 版本的内容。

为了对版本历史进行一些选择性检查,可以检出一些旧的版本(例如一些已标记的版本),并按照上述方式进行比较。


1
你应该在文件级别上比较存储库,而不是从svn客户端方面比较...因为如果你通过转储/加载周期创建它们,除了加载周期期间添加的新修订版本外,它们必须是相同的...所以我建议在两个存储库树之间进行差异比较...如果你在Unix上,可以使用Unix diff工具...但是350 GB的比较需要时间,但这是你必须支付的代价...
diff -r Repos1 Repos2

除了新版本之外,结果应该为空...

或者您可以执行第二个svnadmin dump Repos2 >repos2.dump,并将其与用于创建此文件的文件进行比较。结果应该是完全相同的...(除了新版本)...

或编写一个脚本,从两个存储库中检出一定数量(或全部)的版本,并在那个级别上进行比较...但我认为这需要更多时间...


1

我想要类似的东西来验证一个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

注意:如果source.txt大于1GB,我会跳过差异并发出警告,否则diff会占用太多内存。也许有一天,我会将差异输入分成块以处理大型转储。我还不得不添加--deltas,否则会出现一些属性信息的错误差异。
我认为这正按照我的意愿工作,并给我一些信心(基于svnadmin dump),即svnadmin sync正在正确工作。
此致,
Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接