【问题标题】:How to combine two projects in Mercurial?如何在 Mercurial 中合并两个项目?
【发布时间】:2010-09-05 23:38:27
【问题描述】:

我有两个独立的 mercurial 存储库。在这一点上,他们“合二为一”是有道理的,因为我想同时处理这两个项目。

我真的希望这两个项目都成为新存储库中的子目录。

  1. 如何合并这两个项目?
  2. 这是个好主意,还是我应该 将它们分开?

看来我应该能够从一个存储库推送到另一个存储库...也许这真的很简单?

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    我能够以这种方式组合我的两个存储库:

    1. 使用hg clone first_repository 克隆其中一个存储库。
    2. 使用hg pull -f other_repository 从其他存储库中提取代码。

    pull 上的-f(强制)标志是关键——它表示忽略两个存储库不是来自同一来源的事实。

    这里是 the docs 用于此功能。

    【讨论】:

    • 这是否也保留了第二个仓库中提交的哈希键? (我猜不是,但在你进行合并之前可能没问题。)
    • 这行得通,但您还需要运行 hg merge 才能最终让一切正常运行
    • @Marcus Lindblom: 拉取变更集永远不会,永远 改变它的哈希值。如果您在执行此操作后查看hg glog,您会看到您有两行不相关的变更集。每行中的第一个变更集没有父项,但这对 Mercurial 来说不是问题。拉动后,您需要为 hg mv 将所有内容放入适当的子文件夹的每一行创建一个新的变更集,然后合并这些行,一切就绪。
    • 如果两个存储库都有它们共同的代码怎么办。合并会自动处理吗?至于合并,我们可以说 $ hg merge ?
    • 仅供参考,这里是这个过程的文档mercurial.selenic.com/wiki/MergingUnrelatedRepositories
    【解决方案2】:

    hg 从 1.3 (2009-07-01) 开始拥有subrepo。早期版本不完整且不稳定,但现在非常可用。

    【讨论】:

    • 我发现 subrepos 使用起来很痛苦。它们可以工作,但你必须跳过一些障碍才能让它们表现良好,如果你不小心,可能会导致很多头痛。
    • 可能值得注意的是,子存储库正式是不得已的功能:mercurial.selenic.com/wiki/Subrepository(截至 2013.11.12)
    【解决方案3】:

    如果您没有在各个项目中使用相同的代码,请将它们分开。您可以将每个项目的您的个人存储库设置为仅一个目录。为什么不需要混合所有分支、合并和提交 cmets。

    关于您的编辑:从一个存储库推送到另一个存储库。您始终可以使用transplant 命令。虽然,所有这一切都只是让您渴望将两者结合起来,因此您可能会觉得使用我的建议会感到不舒服。然后你可以使用森林扩展或其他东西。

    hg transplant -s REPOSITORY lower_rev:high_rev
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2022-12-18
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多