【问题标题】:Merging 3 related repos together using hg使用 hg 将 3 个相关的 repos 合并在一起
【发布时间】:2015-08-10 23:52:12
【问题描述】:

我正在尝试使用 mercurial 将 3 个存储库合并为一个。回购 A 是我想将回购 B 和 C 合并到的那个。这些是 AS3 项目,A 依赖于 B 和 C 的文件。

我尝试按照这篇文章中的步骤操作: Merging two different repositories

但是,我认为这取决于存储库不共享任何内容的事实。在我的情况下,由于项目具有相同的文件结构,它似乎只是覆盖了前一个(例如:两者都有 /images 文件夹)。

有什么建议吗?

【问题讨论】:

  • 我认为我们需要更多信息来了解您希望通过合并获得什么结果。所以项目具有相同的结构,合并意味着它们都使用相同的图像文件夹。如果他们应该共享这些数据,那不是您想要的吗?您希望看到包含合并 A、B 和 C 的工作目录的最终结构是什么样的?
  • 是单个项目的客户特定更改还是...?写更多的技术细节,猜测不好
  • @Nanhydrin 我确实希望发生这种情况,但是,似乎按照上面帖子中的过程,它结束了我强制合并的回购(B 强制合并到 A)导致 B覆盖 A 而不是共享。基本上,我的目标是将这 3 个包含相似结构的项目合并为 1 个维护相同结构的项目(从而维护提交历史记录)。
  • 您是否正在执行他们在该过程中指定的还原步骤,因为这会消除您对其中一个或另一个所做的所有更改?
  • 为什么是我。 (我对这个 repo 的东西很陌生,所以我只是一步一步地跟着)。

标签: merge mercurial


【解决方案1】:

让我们确保我们完全理解我们的目标:

我们希望保留所有三个项目的所有文件。如果相同的文件名出现在多个存储库中,我们要做什么?

  • 保留 A(或 B,或 C)的版本:我们可以酌情使用 --tool internal:localinternal:other 执行合并。本地保留我们当前拥有的版本,其他保留我们正在合并的版本。
  • 使用 Mercurial 的标准三向合并逻辑将它们合并在一起(由于我们没有共同的祖先,这不会很好地工作):--tool internal:merge 或者根本不指定选项。这可能会产生丑陋的合并冲突,我们必须解决这些冲突。
  • 这首先不能(不应该)发生:--tool internal:fail 在这种情况下会抛出错误并且不会尝试合并文件。

所以,这是修改后的过程:

$ hg init combined
$ cd combined
$ hg pull ../A
$ hg update
$ hg pull ../B --force
$ hg merge --tool something # see above
$ # Manually fix up any files that throw merge conflicts
$ hg resolve --all -m  # Mark all files as resolved, only if there were conflicts
$ hg commit -m "Merge A and B"
$ hg pull ../C --force
$ hg merge --tool something # see above
$ # Fix conflicts
$ hg resolve --all -m  # Only if there were conflicts
$ hg commit -m "Merge A+B and C"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多