【问题标题】:Mercurial from Subversion: moves, renames and tagsSubversion 的 Mercurial:移动、重命名和标签
【发布时间】:2009-08-25 17:43:42
【问题描述】:

我有一个具有以下布局的颠覆存储库:

svnrepo/projectA/trunk
svnrepo/projectA/tags
svnrepo/projectA/branches
svnrepo/projectB/trunk
svnrepo/projectB/tags
svnrepo/projectB/branches


我想将其移至具有修改后布局的 mercurial 存储库:
hgrepo/projectA
hgrepo/projectB

这样做的最佳方法是什么?我的一些想法是:

选项1

将 subversion 中的路径(使用 svn move)重新排列为中间格式:

svnrepo/trunk/projectA
svnrepo/trunk/projectB
svnrepo/tags/projectA
svnrepo/tags/projectB
svnrepo/branches/projectA
svnrepo/branches/projectB

然后在 svnrepo/trunk 上进行 hg 转换。这会混淆 hg 导入吗?

选项 2 hg 将每个项目/主干转换为单独的 hg 存储库。然后将它们合并到一个单独的 hg repo 中(使用 hg init、hg pull -f projectA 等)。我认为这会丢失第一个导入项目的分支名称和标签。

【问题讨论】:

  • 不同的项目有什么关系?如果它们不相关,那么它们一开始就不应该在同一个仓库中。

标签: svn mercurial mercurial-convert


【解决方案1】:

在 Mercurial 中,将不相关的代码库存储在同一个存储库中是个坏主意,因为它会

  • 显着复杂的合并。合并将取决于对所有项目所做的更改,而不仅仅是您尝试合并的项目。
  • 导致存储和签出开销 -- 据我所知,Mercurial 不支持仅签出存储库的子目录。您必须一次分支所有项目。

解决方案是将您的单个 Subversion 存储库转换为多个 Mercurial 存储库。大多数转换工具都支持这一点。

【讨论】:

    【解决方案2】:

    每个项目都应该在其自己的 Hg 存储库中(以便只能获取或标记特定项目)。

    请记住,您在 Subversion 中看到的目录(主干、标签、分支)在任何现代 (D)VCS 中都不存在,其中分支和标签是一等公民(即由工具直接管理的元数据),如与廉价副本(在 SVN 中)产生的简单目录相反。

    这意味着当您转换 SVN 存储库时,您不应该直接在 Hg 存储库的历史记录中存储任何“主干”、“标签”或“分支”目录。

    您应该使用tool like hgsubversion 将您的 SVN 存储库(例如“repo/projectA”)导入专用于 projectA 的 Hg 存储库。它将保留原始 SVN 项目的标签和分支,并将它们转换为 Hg 对象。
    来自its documentation

    所有使用hgpullsvn 的更新都在从SVN URL 的最后一个组件命名的分支中进行(例如,如果SVN URL 是svn://server/myproj/branches/feature-ZZZhgpullsvn 将创建并使用命名分支'feature-ZZZ' )


    如果你不想“转换”而是“同步”,tonfa 推荐hgsubversion,尽管它“由于大量重构目前处于不断变化的状态”:

    现在它还没有准备好用于生产。只有当你准备好破解它并深入研究 Mercurial 和/或 Subversion 的内部时,你才应该使用它。

    由于hgsvn 还允许通过hgpushsvnhgpullsvn 进行一些同步...我现在会坚持使用hgsvn

    【讨论】:

    • 请不要提倡 hgsvn,hgsubversion 是处理 svn 实时同步的首选方式(与 hg convert 所做的“最终”转换相反)。
    • 你现在混合了这两个工具。 (我仍然认为 hgsubversion 更好,即使它不宣传自己用于生产用途,它也是长期解决方案)。
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2010-12-17
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多