Mercurial仅合并某些变更集

时间:2010-04-07 21:41:32

标签: mercurial tortoisehg

好的,我们最近从SVN转换为Mercurial 我们通常使用TortoiseHG。

在我们的一个存储库中,我们拥有所有项目,C ++ / .NET / ASP。我们有大约100个项目,都使用共同的图书馆项目
因此,为每个项目创建多个repo将是非常困难的任务。

现在,我们有default分支,让我们说branchA
我正在处理BranchA并添加我的超级更改,我更改了一个公共库,让我们说一个扩展方法

我想将其提交给branchAdefault,我该怎么做?

但是,我不希望branchA的所有更改都合并到default,我也不希望default的所有其他更改< / p>

希望这是足够的信息!

5 个答案:

答案 0 :(得分:23)

只是为了让事情稍微更新一下:graft command在Mercurial中实现了挑选。

  

此命令使用Mercurial的合并逻辑来复制单个更改   来自其他分支,而不在历史图表中合并分支。   这有时被称为“backporting”或“cherry-picking”。通过   默认情况下,移植将从源复制用户,日期和说明   的变更。

答案 1 :(得分:11)

有一种方法可以避免这个问题。您可以make all your changes on separate feature branches from some baseline revision,通常是最后一个版本的标记或其他一些稳定点S

这样,您的更改X将位于其自己的分支上,该分支可以与其他分支合并(合并M1M2),而不会引入不需要的更改集:

-----S--o----o---M1----o---> default
     |          /
     |---------X   feature or bugfix
     |          \
     \--o---o----M2----o-----> BranchA 

这只需要正常的hg merge操作;无需补丁,TransplantMQ

答案 2 :(得分:5)

如果将公共代码分隔到自己的存储库中,则可以使用子对象将其包含在每个项目中。

顺便说一句,我 建议为每个项目都有一个单独的存储库,特别是如果有这么多的话。

答案 3 :(得分:3)

想要的不是合并,而是樱桃挑选。您可以使用https://www.mercurial-scm.org/wiki/TransplantExtension,但要注意那里提到的并发症。

答案 4 :(得分:-1)

您正在描述“采摘樱桃”或进行“部分合并”,目前Mercurial无法做到这一点。您有几个选择:

  • 将您的公共代码分隔到自己的存储库中。
  • 生成您对公共代码所做更改的差异,并将其应用于default分支。