使用svnsync和hg convert同步SVN到Mercurial的过程中,会忽略svn:externals吗?

3
我已经按照这个教程(http://oreilly.com/opensource/excerpts/opensource-mercurial/migrating-to-mercurial.html)创建了一个SVN仓库的Mercurial镜像。同步工作得很好,但我注意到它没有捕获主要SVN仓库中引用的外部仓库……

理想情况下,我希望能够将所有内容作为单个存储库拉入Mercurial中(如果可能的话还包括更改集)。

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

是否有任何方法可以强制同步外部仓库,并将其与同一Mercurial仓库合并?


我认为一个好的解决方案是重新设置同步过程以同步外部仓库。创建当前hg镜像的分支,并将外部仓库同步到hg镜像分支中。

问题在于,外部仓库的主干打算进入第一个镜像的子文件夹,那么如何使用convert复制它呢?我怀疑我无法告诉convert导入到子文件夹中......

1个回答

3

SVN同步工具或者Mercurial转换工具,哪一个导致了外部引用丢失的问题?

svnsync 用于创建 SVN 仓库的镜像。这包括任何 svn:externals 属性。因此,这必须是 hg convert 的限制。

请注意,你并不一定需要使用 svnsync 来创建镜像。该文章之所以建议这样做,只是因为本地副本可能会加快转换进程。

有没有办法将外部引用也同步到同一个 Mercurial 仓库中?

通常,SVN 仓库包含多个松散相关的项目,每个项目都有自己的分支和标签。但 Mercurial 的工作方式不同:当你进行分支操作时,你会将仓库中的所有内容都分支出来。因此,对于每个在 SVN 中有自己的 trunk/branches/tags 的项目,你应该为其创建一个单独的 Mercurial 仓库。这种不同的方法很可能是为什么 hg convert 忽略了外部引用,即使它们在同一个 SVN 仓库中也是如此。

Mercurial 中有一种与 svn:externals 等价的机制,叫做 "subrepositories"。你可以在项目的根目录下创建一个名为 .hgsub 的文件,其中包含类似的内容,而不是使用一个或多个 svn:externals 属性。你应该先将每个 SVN 项目转换为单独的 Mercurial 仓库,然后使用 subrepositories 将它们连接起来。有关更多详细信息,请参见 Mercurial Wiki 页面上的 Subrepositories


谢谢您的回复,Wim。如果我使用子仓库功能,是否仍然能够保持每个hg仓库与SVN对应仓库完全同步? - Jon L.
1
@Jon:我认为这不会是个问题。在将更改推送到SVN后,您只需在SVN存储库中的每个项目中添加一个额外的.hgsub文件,当然,这对于SVN没有特殊含义。但我对这种使用mercurial的经验不是很丰富。 - Wim Coenen
谢谢,我会尝试一下并看看会出现什么问题 :-) - Jon L.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接