2017-09-22 102 views
2

我对有拆分到两个分支将共享主要功能的项目Mercurial库工作,但将在它们的一些功能差异:水银:如何与两个“主分支”

  ---- B 
     /
---source-+----- A 

现在我想知道我是如何与之合作的。

      ----- new feature ------- 
         /      \ 
      ---- B1 ----+ B2 --- B3 ----- bugfix ---+- MERGE --- 
     /
---source-+----- A1 ---- A2 ------------------------------------ 

假设A1,B1,B2,......等等都是只应该出现在特定的树枝简单的改变(更新标志,改变文本,...)。不过,我希望在两个分支中都具有“新功能”和“错误修正”。

很明显,我不能将分支B合并到A中,否则我最终会在B中完成所有更改(但我不想更新徽标)。

所以:我该怎么做?我真的必须使用this question中建议的第三个分支吗?这将迫使我去适应一个全新的工作流程。

另外related question提示移植和移植。这是要走的路吗?

+0

我已经使用这个模型,它缩放比较差。这听起来像两个分公司的产品都非常相似。从长远来看,使用条件编译或配置文件来分离差异会更简单。 – user694733

+0

它们在开始时可能会非常相似,但随着时间的推移将会进一步分离。我们的客户已经分支出一个业务部门,所以现在我们有两个对应用程序的未来有不同想法的小客户。 – BlaM

回答

2

你勾勒出自己的两种方式要么是好的 - 它更多的你最喜欢什么的问题:

一)有三个分支,具有由每个项目/客户所需要的一切一个主线 - 和两个客户 - 相对于更改徽标或文本的主线有特定更改的分支。 Mainline接收错误修复和新功能,并定期合并到客户分支机构中。这样他们不会“污染”彼此。

b)将它保留在两个分支,每个客户一个分支,并将与两个分支相关的变更移植到另一个分支。

选择a)或b)是品味的问题,在我看来,更多的问题是你是否会有更多的变更集,这两个变更集由两者共享(然后3个分支,少嫁接),或者是否有更多变更集特定到一个分支或另一个分支 - 然后嫁接是较少的工作。可能我总是会选择一个),但是;它感觉“更清洁”。

实际上有一个选项c):将两个分支合并到eachother中,并在合并时注意不要合并特定于其他分支的事物。但这可能非常乏味,至少从长远来看,主要取决于差异的复杂性以及它们在总体变化方面的位置。如果细节在他们自己的文件中,在合并期间合并和跳过“错误”更改相对容易。