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

Mercurial-将同一变更集合并到存储库两次?,mercurial,merge,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版本1.0开始,此回购协议中的任何附加更改都将合并到主干中 v2.0,从主干开始 基于myapp newstuff和主干合并发布的v3.0或v4.0。在合并时,主干

我们有以下Mercurial存储库:

Trunk
|
|
|---------myapp_1_0_23 (created off release 1.0.23)    
|
|---------myapp-newstuff (created off rel 2.0.4)
发布时间表(尚未发布任何内容):

  • myapp_1.0.23
    版本1.0开始,此回购协议中的任何附加更改都将合并到主干中
  • v2.0,从主干开始
  • 基于
    myapp newstuff
    和主干合并发布的v3.0或v4.0。在合并时,主干可能有v2.0代码或一些我们将作为v3.0从主干中发布的新特性
myapp_1.0.23
中进行更改后,我们将它们合并到主干中,但假设我们在
myapp newstuff
中也需要它们,因此我们也将它们合并到主干中。当我们最终将
myapp newstuff
代码合并到主干时会发生什么


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

Mercurial将很好地处理这种情况——因为您使用的是“合并”。当您使用导出/导入(或移植),即所谓的樱桃采摘,并且您在其中多次使用不同节点ID(由于不同的父节点)的相同变更集时,Mercurial无法知道“哦,这个已经在这里了”。然而,只要你合并Mercurial,你就可以很好地说“哦,这个回购协议已经有了那个变更集,所以我不需要重新应用它”


一般的经验法则是:“尽可能早地与父母进行更改,然后向下合并”。如果我有一个bug出现在版本1、版本2和版本3中,我会在版本1中修复它,然后合并为版本2,然后合并为版本3。相反,如果你先在三个版本中修复它,那么你必须尝试将它分成两个版本,而不带第三个版本中的所有其他更改——这很难,而且通常需要我们尽量避免的切肤之痛。

Mercurial会很好地处理这种情况——因为你使用的是“合并”。当您使用导出/导入(或移植),即所谓的樱桃采摘,并且您在其中多次使用不同节点ID(由于不同的父节点)的相同变更集时,Mercurial无法知道“哦,这个已经在这里了”。然而,只要你合并Mercurial,你就可以很好地说“哦,这个回购协议已经有了那个变更集,所以我不需要重新应用它”


一般的经验法则是:“尽可能早地与父母进行更改,然后向下合并”。如果我有一个bug出现在版本1、版本2和版本3中,我会在版本1中修复它,然后合并为版本2,然后合并为版本3。相反,如果您先在三个版本中修复它,那么您必须尝试将它分成两个版本,而不带第三版本中的所有其他更改—这很难,而且通常需要我们尽量避免的切肤之痛。

感谢Ry4an,Mercurial如何跟踪从其他存储库合并的更改集?它是否使用变更集哈希id?这个id在所有存储库中都是唯一的吗?一如既往,学习Mercurial的最佳方法是制作一个本地克隆或只是一个副本,然后进行实验,观察结果。是的,节点id(哈希)是全局的,用于跟踪已经存在的内容@Lasse是正确的——只需在命令行中使用它。您可以使用dir-to-dir推送来测试所有这些,而无需任何实际工作。感谢Ry4an,Mercurial如何跟踪从其他存储库合并的变更集?它是否使用变更集哈希id?这个id在所有存储库中都是唯一的吗?一如既往,学习Mercurial的最佳方法是制作一个本地克隆或只是一个副本,然后进行实验,观察结果。是的,节点id(哈希)是全局的,用于跟踪已经存在的内容@Lasse是正确的——只需在命令行中使用它。您可以使用dir-to-dir推送来测试所有这些,而无需任何实际努力。我问的问题基本相同:我问的问题基本相同: