【问题标题】:Syncing SVN to Mercurial using svnsync & hg convert -- misses svn:externals?使用 svnsync 和 hg convert 将 SVN 同步到 Mercurial -- 错过 svn:externals?
【发布时间】:2011-05-14 14:20:50
【问题描述】:

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

理想情况下,我希望能够将所有内容作为单个 repo 拉入 Mercurial(如果可能,还包括变更集)。

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

有什么办法可以强制将外部也同步到同一个 Mercurial 存储库中?


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

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

【问题讨论】:

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


    【解决方案1】:

    缺少的外部是svnsync的限制还是hg convert的限制?

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

    请注意,您实际上并不需要使用svnsync 创建镜像。这篇文章推荐这样做只是因为拥有一个本地副本可能会加快转换过程。

    有什么方法可以强制将外部也同步到同一个 Mercurial 存储库中?

    SVN 存储库通常包含多个松散相关的项目,每个项目都有自己的分支和标签。但是 Mercurial 不是这样工作的:当您分支时,您会分支存储库中的所有内容。您应该为 SVN 中具有自己的主干/分支/标签的每个项目创建一个单独的 mercurial 存储库。这种不同的方法很可能是 hg convert 忽略外部的原因,即使它们在同一个 SVN 存储库中。

    在 mercurial 中有一个 svn:externals 的等价物;它被称为“子存储库”。您在项目的根目录中拥有一个具有相似内容的 .hgsub 文件,而不是拥有一个或多个 svn:externals 属性。您应该首先将每个 SVN 项目转换为单独的 mercurial 存储库,然后将它们与子存储库连接。有关详细信息,请参阅mercurial wiki page for subrepositories

    【讨论】:

    • 感谢 Wim 的回复。如果我要使用子存储库功能,我是否仍然能够使每个 hg 存储库与 SVN 对应物完全同步?
    • @Jon:我认为这不是问题。将更改推送到 SVN 后,您的 SVN 存储库中的每个项目都会有一个额外的 .hgsub 文件,当然这对 SVN 没有特殊意义。但我真的没有像那样使用 mercurial 的经验。
    • 谢谢,我会试试看有什么问题:-)
    猜你喜欢
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2012-03-07
    相关资源
    最近更新 更多