Version control 使用Mercurial的按功能分支工作流

Version control 使用Mercurial的按功能分支工作流,version-control,mercurial,Version Control,Mercurial,我们有一个由10名开发人员组成的团队,他们为不同的功能并行工作,有时这些功能使用公共代码,有时不使用。 现在我们正在将流程更改为按功能分支,mercurial似乎更适合这种开发 我认为这个过程是这样的: 1.从默认(中继)生成释放分支(r-b) 2.从默认(主干)生成要素分支(f-b) 当开发人员认为他的特性完成时,他可以将f-b合并到r-b。到了QA的时候,我们将所有完成的f-b合并到r-b,并为我们的QA创建发布 问题: 当QA发现bug时,开发人员应该修改他的f-b并将其再次合并到r-b。

我们有一个由10名开发人员组成的团队,他们为不同的功能并行工作,有时这些功能使用公共代码,有时不使用。 现在我们正在将流程更改为按功能分支,mercurial似乎更适合这种开发

我认为这个过程是这样的: 1.从默认(中继)生成释放分支(r-b) 2.从默认(主干)生成要素分支(f-b)

当开发人员认为他的特性完成时,他可以将f-b合并到r-b。到了QA的时候,我们将所有完成的f-b合并到r-b,并为我们的QA创建发布

问题:

  • 当QA发现bug时,开发人员应该修改他的f-b并将其再次合并到r-b。这是否意味着开发人员只需切换到他的f-b并开始修复错误,然后再次简单地将f-b合并到r-b

  • 当发布通过QA后,它将转到PROD-我们如何冻结更改?“hg标签”是一个不错的选择,但如果有人真的想要,他可以更新标签


  • 谢谢

    如果您要合并到特定的发布分支中,那么您的功能分支应该从发布分支中分支,而不是从主干中分支。与父分支合并比与非父分支合并更简单

    1) 如果你真的想做功能分支,那么每个bug都有自己的分支。这将有助于将错误修复与新功能分开。毕竟,这是每个特性的分支,而不是每个开发人员的分支


    2) Hg标签就是我用过的。你是对的,如果有人真的想移动标记,他们会更改标记,但是标记是有版本的,你可以在主hg repo上安装钩子,以便在标记移动时发出警报。我真的不会担心标签被移动,除非你不能信任你的开发者,在这种情况下你就完蛋了。

    你第一个问题的答案是“是”

    冻结发布的最佳方法是拥有一个单独的发布克隆,只有发布经理可以将变更集推/拉到该克隆。使用分支并不意味着多个克隆在您的工作流中没有位置。拥有一个克隆,QA会对其进行最后的飞行前测试,开发人员无法将更改推送到该克隆上,从而形成一个强大的防火墙


    也可以考虑为特性分支使用书签。因为,我相信大家都知道,Mercurial命名的分支名称永远不会消失,类似git的书签对于功能和bug之类的分类概念非常有效。

    我们每周发布一次,很难知道F-b#1是否会出现在这个版本r-#1中。在本例中,我想将f-b#1移动到下一版本r-#2或下一版本r-#3。在这种情况下,开发人员只需在r-#1之后从trunk更新他的f-b#1(发布后,我们将r-b合并到trunk,以使最后一个稳定构建成为trunk),然后继续工作。从VSC的角度来看,我不知道这是否是一个好的决定,但对于开发人员来说,很容易理解的是,所有f-b都是从主干生成的,他们不在乎f-b来自哪个版本。我不喜欢每个bug的分支,因为我不需要这个分支-我需要做得很好的特性。同样,开发人员和构建大师很容易理解每个特性的分支。在JIRA中很容易看到,可以看到特性问题状态,并理解该特性不能集成到r-b中,也可以集成到r-b中。但是对于每个bug的分支,构建主控应该找到所有相关的分支。但是如果这是VSC管理历史记录/合并/等的最佳方式,那么我没有选择书签的好处是什么?对我来说,命名的分支更容易,它们总是存储在mercurial中。好处,或者更准确地说,区别在于它们短暂的性质。它们存储在回购协议中,可以推拉,也可以删除。它们大多像“自动前进的标签”。许多人发现命名分支因其存在时间短而令人沮丧,因为它们永远无法删除。如果拥有1000个分支对你们双方都不起作用(我也不介意),那么命名分支也没什么错。我需要更深入地阅读mercurial手册,以了解书签是如何工作的。您可以通过“hgcommit--close branch”删除命名分支,但不删除它。这会对某些视图而不是其他视图隐藏它。再说一次,如果你对命名分支很满意,那很好,我只是看到很多人说“我怎么才能完全摆脱分支名称?”并且不喜欢回答“你不能”。变更集总是在创建它的分支上——分支名称是任何变更集的永久部分——我认为这是一件伟大的事情,但不是每个人都这样做,那些人应该使用书签。有很多好的选择;没有硬性规定。作为开发人员,隐藏对我来说是可以的——我不在乎它是如何工作的——甚至可以随时重新找到命名的分支。拥有你不需要的东西总比没有你真正需要的东西好:)谢谢你的回答。