使用svnsync& amp;将SVN同步到Mercurial hg convert - 想念svn:externals?

时间:2010-11-23 16:44:58

标签: svn mercurial svnsync hg-convert mercurial-extension

我已经创建了一个SVN存储库的Mercurial镜像(使用本教程:http://oreilly.com/opensource/excerpts/opensource-mercurial/migrating-to-mercurial.html)。同步工作得很好,除了我注意到它没有拿起主要SVN仓库中引用的外部存储库...

我希望能够将所有内容作为单个回购邮件提取到Mercurial中(如果可能的话,还可以使用更改集)。

我不确定的是:缺少外部限制svnsync,还是限制hg转换?

有没有办法可以强制将外部同步到同一个Mercurial仓库?


我认为一个好的解决方案是再次为外部设置同步过程。 创建当前hg镜像的分支,并将外部同步到hg镜像分叉。

问题就在于,外部的主干应该进入第一个镜像的子文件夹,那么如何使用convert复制呢?我怀疑我可以告诉转换为导入到子文件夹...

1 个答案:

答案 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