如何使用hg的defaut stable分支工作流程与其他开发人员合作

时间:2012-07-30 05:26:20

标签: mercurial workflow branch tortoisehg branching-and-merging

我发现一篇文章谈论git的工作流程here,并试图将它应用到我自己的hg项目中,当我为每个功能创建一个分支时,似乎有点乱,因为在git中,分支可以被删除,而在hg中,它只能被关闭。所以这将导致回购中大量封闭的分支,这就是我不想看到的。

后来,我搜索了另一篇谈论Hg工作流的文章here我试过了,当我是该项目的唯一开发人员时似乎很好,但是当我试图添加另一个开发人员时,历史就变成了有点复杂。

我用三个回购测试了这个

1, Base
2, devA   ---> stands for developer A's repo
3, devB   ---> stands for developer B's repo

首先我在devA上工作,对devA的default分支进行了更改,并在devA的stable分支上进行了修改。之后,我将devA推送到Base。

devA的图表:

devA's graph

如果图像坏了,基于文本的图表就在这里:

@    summary:     Merge with stable
|\   tag:         tip
| |  parent:      4:d2973e149720
| |  parent:      5:3788143e99fc
| |  date:        Mon Jul 30 13:17:44 2012 +0800
| |  
| |
| o  changeset:   5:3788143e99fc
| |  branch:      stable
| |  parent:      3:4a955d01ea44
| |  date:        Mon Jul 30 13:17:19 2012 +0800
| |  summary:     fix a bug in featureA
| |
o |  changeset:   4:d2973e149720
| |  parent:      2:8e106fcfa9bf
| |  date:        Mon Jul 30 13:16:46 2012 +0800
| |  summary:     finish featureA advance
| |
| o  changeset:   3:4a955d01ea44
|/|  branch:      stable
| |  parent:      1:7b81b986d485
| |  parent:      2:8e106fcfa9bf
| |  date:        Mon Jul 30 13:16:01 2012 +0800
| |  summary:     Merge with default
| |
o |  changeset:   2:8e106fcfa9bf
| |  parent:      0:7d7dc422ec7c
| |  date:        Mon Jul 30 13:15:43 2012 +0800
| |  summary:     finish feature A
| |
| o  changeset:   1:7b81b986d485
|/   branch:      stable
|    date:        Mon Jul 30 13:14:49 2012 +0800
|    summary:     Create stable branch
|
o  changeset:   0:7d7dc422ec7c
   date:        Mon Jul 30 13:14:21 2012 +0800
   summary:     Init commit

然后我切换到devB,因为我想模拟并行工作,所以我没有从Base中取出,而是开始在devB的default分支上工作,并在devB的{{1}上做bugfix分支。

devB的图与devA的图相似

问题出现了,当我尝试将devB的更改推送到Base时,它表示存在冲突,我需要在本地合并它,我撤消了更改然后我在devB中的历史图变得有点凌乱,因为我得到了devA的stabledefault所以在devB中现在有两个stable个分支和两个default个分支。

让我困惑的是真正的项目如何使用这种工作流程,mecurial的分支图是here。看起来很干净,但是他们是怎么做到的?

2 个答案:

答案 0 :(得分:1)

不要将存储库拆分为“开发人员分支”,而是将“功能分支”分支。每个分支应该具有相当少的提交数量,所有提交都用于实现特定功能。在每个构建/发布中,您选择准备部署的分支并将它们合并为默认值。

答案 1 :(得分:0)

latest hgflow(0.9.5,尚未正式发布,但效果很好)实际上允许您完全删除功能分支。摘自其Wiki:

  

添加了 - 完成操作的选项。使用此选项,您可以在分支成功完成后擦除(即完全从存储库中删除)分支。最终效果就好像分支中的所有更改都已折叠,然后作为单个变更集提交到分支合并到的目标分支。查看hg flow help @finish了解更多细节。