Mercurial - 将相同的变更集合并到存储库两次?

时间:2011-02-02 20:35:19

标签: mercurial merge

我们有这些Mercurial存储库:

Trunk
|
|
|---------myapp_1_0_23 (created off release 1.0.23)    
|
|---------myapp-newstuff (created off rel 2.0.4)

发布时间表(尚未发布):

    来自myapp_1.0.23
  • v1.0,此回购中的任何add'l更改都将合并到主干
  • v2.0 from the trunk
  • v3.0或v4.0基于myapp-newstuff和主干的合并而发布。在合并时,中继可能具有v2.0代码或我们将从主干中释放的一些新功能,如v3.0

myapp_1.0.23中进行更改后,我们会将它们合并到主干中,但是我们在myapp-newstuff中也需要它们,所以我们也将它们合并到那里。当我们最终将myapp-newstuff代码合并到主干时会发生什么?

主干已经在myapp_1.0.23中进行了更改,那么当我们将myapp-newstuff的相同变更集合并回主干时会发生什么? Mercurial是否足够聪明,知道这些变更集已经在主干中?

1 个答案:

答案 0 :(得分:5)

Mercurial会很好地处理这种情况 - 因为你正在使用'merge'。当你使用导出/导入(或移植), cherry pick 时,你可以多次使用不同的节点ID(由于不同的父节点)在那里有相同的变更集,那么Mercurial可以'我知道“哦,这个人已经在这里了”。但是,只要你合并Mercurial就会说得很好“哦,这个repo已经有了变更集,所以我不需要重新应用它。”

一般的经验法则是:“尽可能早地做出每一个更改,然后合并”。如果我有第一版,第二版和第三版的错误,我将其修复为一个,然后合并为两个,然后合并为三个。如果你先把它固定在三个中,那么你必须尝试将它变成两个而不用第三版带来所有其他变化 - 这很难并且通常需要我们试图避免的樱桃挑选。 / p>