我已经创建了一个SVN存储库的Mercurial镜像(使用本教程:http://oreilly.com/opensource/excerpts/opensource-mercurial/migrating-to-mercurial.html)。同步工作得很好,除了我注意到它没有拿起主要SVN仓库中引用的外部存储库...
我希望能够将所有内容作为单个回购邮件提取到Mercurial中(如果可能的话,还可以使用更改集)。
我不确定的是:缺少外部限制svnsync,还是限制hg转换?
有没有办法可以强制将外部同步到同一个Mercurial仓库?
我认为一个好的解决方案是再次为外部设置同步过程。 创建当前hg镜像的分支,并将外部同步到hg镜像分叉。
问题就在于,外部的主干应该进入第一个镜像的子文件夹,那么如何使用convert复制呢?我怀疑我可以告诉转换为导入到子文件夹...
答案 0 :(得分:3)
是缺少svnsync的外部限制还是hg convert的限制?
svnsync
用于创建SVN存储库的镜像。这包括任何svn:externals
属性。因此,它必须是hg convert
的限制。
请注意,您实际上不需要使用svnsync
创建镜像。本文建议这只是因为拥有本地副本可能会加快转换过程。
有没有办法可以强制将外部同步到同一个Mercurial仓库?
SVN存储库通常包含多个松散相关的项目,每个项目都有自己的分支和标记。但Mercurial并不是那样工作的:当你进行分支时,你会分支存储库中的所有东西。您应该为SVN中具有自己的主干/分支/标记的每个项目创建一个单独的mercurial存储库。这种不同的方法很可能是hg convert
忽略外部因素的原因,即使它们位于同一个SVN存储库中。
mercurial中有相当于svn:externals
的内容;它被称为“子存储库”。您没有一个或多个svn:externals
属性,而是在项目的根目录中有一个具有相似内容的.hgsub
文件。您应该首先将每个SVN项目转换为单独的mercurial存储库,然后将它们与子存储库连接。有关详细信息,请参阅mercurial wiki page for subrepositories。