我们正试图从Subversion迁移到Mercurial,我们遇到了障碍。 “svnadmin verify”产生此错误:
svnadmin:没有这样的修订版21228
在服务器上查看,21228的“revs”目录中没有文件。其他所有内容都完好无损且当前头部工作正常(我们现在正在修订63000左右)。
我们并不关心这次修改,但我们并不想在转换时丢失1-21227的历史记录。有谁知道强制SVN忽略此错误或以某种方式恢复丢失文件的方法?
答案 0 :(得分:3)
我在我的一个svn中经历了类似的事情 - > hg转换。如果您不担心该版本中的内容,您可以分三步进行转换:
1)使用svnadmin dump
转储SVN存储库两次,跳过错误修订
svnadmin dump -r1:21227 /var/svn/repo/foo > foo-svn-1.dump
svnadmin dump -r21229:X /var/svn/repo/foo > foo-svn-2.dump
并将它们重新加载到新的临时SVN存储库中。
svnadmin create ./foo-svn-1
svnadmin load ./foo-svn-1 ./foo-svn-1.dump
svnadmin create ./foo-svn-2
svnadmin load ./foo-svn-2 ./foo-svn-2.dump
2)使用hg convert
hg convert ./foo-svn-1 foo-hg-1
hg convert ./foo-svn-2 foo-hg-2
并将所有变更集从第二个存储库拉入第一个存储库(使用hg pull -f
强制导入不相关的变更集)。
cd ./foo-hg-1
hg pull -f ../foo-hg-2
然后,您将在修订历史中有一个中断,您可以拆分svn仓库。
3)如Splicing over discontinuities in Mercurial repository timeline
中所述,将两棵树与hg rebase
扩展名拼接在一起