我重建了一个巨大的svn存储库(超过350GB - 用了超过11天才完成)。 如何针对现有仓库验证新仓库。 我在两者上尝试了“svn ls”并且它们是相同的 - 但这只是转储根目录。 有没有更好的方法,或者我只需要做随机测试? fyi,存储库在根目录中有超过600K的修订版和16K +文件夹。
答案 0 :(得分:1)
您可以将每个repo的日志转储到文件中,然后区分日志文件。
答案 1 :(得分:1)
svn ls -R转储每个文件夹,而不仅仅是根目录。但它并不能保证所显示的内容真的有效。
您应该做的一件事是检查从两个存储库到两个干净目录的所有内容,并在两个目录树上运行递归比较(当然不包括.svn子文件夹)。如果您需要最后一步的建议,请告诉我们您正在使用哪个操作系统。
当然,这并不会检查版本历史记录,但至少可以保证头版修订版没有任何内容。
要对版本历史记录进行一些选择性检查,请查看一些较旧的版本(例如,某些标记的修订版),并按照上述相同的方式对它们进行比较。
答案 2 :(得分:1)
您应该在文件级别而不是从svn客户端比较存储库...因为如果您通过转储/加载周期创建它们,除了在加载周期期间添加的新修订版本之外它们必须相同...所以我建议在两个存储库树之间做一个差异...如果你在unix上通过unix diff工具...但是350 GB的比较会占用它的时间,但是你需要花费的成本......
diff -r Repos1 Repos2
除了新的转换之外,应该是空结果......
或者您可以执行第二个svnadmin转储Repos2> repos2.dump并将其与您用于创建它的那个进行比较。结果应该相同......(新版本除外)......
或者从两个存储库写一个数字(或全部?)转录的脚本结帐并在该级别进行比较......但我认为这将花费更多时间......
答案 3 :(得分:1)
我想要类似的东西来验证svn存储库对其svnadmin sync clone-copy存储库。对于每个修订号$ r = 1(或0)到HEAD(svnlook最年轻),我做了以下内容:
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转储)svnadmin sync正常工作。
此致