我正在尝试将远程 Subversion 存储库恢复到我的本地计算机上。我没有直接访问服务器来运行 shell 命令的权限,但我对存储库本身拥有完整的 svn 权限。
由于某种我们尚未确定的问题,当一次针对整个存储库运行时,svnsync 和 svndump 以及我尝试过的任何其他方法都不会成功。在操作过程中的某个时候,它会失败,并显示诸如“连接超时”或“无法访问块”之类的消息或类似消息。我们无法找到问题的根源,它可能是服务器上的软件问题、损坏的存储库,或者可能只是不可靠的网络连接。不管是什么问题,控制服务器的人帮助我们解决问题的速度都很慢,所以我们会尽可能地解决它。
我能够批量修改服务器转储。我运行了一系列与这些类似的命令来获得像这样的部分转储:
svnrdump dump -r0:499 https://server/svn/respository > 0-499.dump
svnrdump dump -r500:999 https://server/svn/respository > 500-999.dump
svnrdump dump -r1000:1499 https://server/svn/respository > 1000-1499.dump
这使我能够解决服务器问题。当转储超时或出现其他问题时,我只是重试该部分直到它工作,或者使用较小的增量。现在我有许多转储文件,它们共同代表整个存储库。
我的问题是:如何将这些单独的转储合并到一个本地存储库中?
我试过用一个空的本地存储库来做这个:
svnadmin load repository < 0-499.dump
svnadmin load repository < 500-999.dump
第一个命令有效,但第二个命令失败。该错误消息表明它正在尝试添加一个已经存在的文件,并且它放弃了。我发现我可以这样做:
svn mkdir batch1
svnadmin load --parent-dir "batch1" repository < 0-499.dump
svn mkdir batch2
svnadmin load --parent-dir "batch2" repository < 500-999.dump
这成功地将单独的修订批次加载到存储库中的单独目录中,但我不确定如何/是否可以将它们重新组合到一个文件夹中。
我也知道我可以在创建转储时使用 --incremental 开关,但我不确定这是否是一个好主意,因为我怀疑增量数据中可能存在一些损坏(我怀疑的一个原因是因为运行svnsync
或git svn clone
在存储库上有时会因校验和不匹配而出错)
我可以以某种方式将我拥有的非增量顺序转储合并到一个统一的新存储库中吗?如果不是,我应该使用什么其他方法来考虑svnsync
并且svnrdump
在一次针对所有修订版运行时从未成功?