功能分支仍然(或曾经)被认为是不好的做法?

来自TFS世界,并且对Git感到满意后,我即将向我的团队建议,我们应该纳入Vincent Dressen着名文章指出的Gitflow工作流程。

几乎所有关于分支策略的现代文献都表达了Gitflow工作流程的有效性,该工作流程是功能分支的扩展版本,但是来自有影响力的工程师的过时文章(例如Martin Fowler的Feature Branch文章(2009)),有利于持续集成。

他的一些评论家指出,福勒反对特征分支的部分原因是因为他将SVN用作他的VCS,这是一种无效的合并工具,因此导致福勒推荐分支反模式“合并偏执狂”。

然后Fowler在2011年回应说DVCS系统可能使合并变得更容易,但它们仍然不能解决语义冲突。 现在在2014年,我们有了语义识别合并工具,如Semantic Merge,它可以完全解决这个问题。

我的问题是

  • 功能分支和持续集成是互斥的吗?

  • Fowler的文章在现代开发中有多相关,特别是我们对SourceTree,Git,Jenkins等工具的可访问性以及使功能分支等更容易的代码审查软件?


  • 根据我的经验,这取决于您的功能分支正在创建的位置。 如果您遵循分叉和合并模型,其中功能分支在您的分支上创建,那么我没有看到任何问题。 从主项目的角度来看,它仍然只是一个(主线)分支; 功能分支显示的唯一位置在您的分支中,而使用它们的唯一原因是将您正在提交的更改(以拉请求的形式)与主分支隔离。


    如果您查看维基百科关于持续集成(今天)的文章,您将会看到它将与每日一条主线合并。 基于此,我会说你的问题答案是肯定的,但这并不排除使用特征分支策略。

    对于你的问题,第二我不认为答案是非常直截了当的,但根据我的经验,创建分支很容易,在熵之后合并它们并不容易。 我仍然发现福勒的文章是准确的。


  • 不,您可以在主线和每个功能分支上设置CI,这是没有问题的。

  • 它仍然非常相关。 虽然自动合并算法越来越好,包括一些基于语义的合并,但计算机仍然不可能推断出含义。 在我们获得真正的计算机智能之前,这仍然是一个问题。 问题是,自动合并产生不正确结果的情况的百分比是多少,以及知道它会产生不正确结果的情况的百分比是多少。 实质上,如果您可以自动推断自动合并失败的所有情况,那么您将能够将这些情况路由到人类。 但这也是一个难以解决的问题。 最糟糕的情况并不是自动合并无法合并代码,而是何时合并它,但是合并它是错误的 - 通常以语义或导致竞争条件或其他一些难以辨认的问题,而无需人为的洞察力。

  • 一般来说,功能分支对于隔离一个小团队中的变化非常有用,这个团队对一个功能不熟悉的功能起作用,代码可能会对在项目上工作的其他较大团队产生不利影响,或者您不确定该功能是否会使功能它进入下一个版本。

    您希望将功能分支的使用限制在尽可能最短的时间内。 将两个分支之间的代码与复杂的变更集合在一起可能会很困难并且需要很多时间,难度会比o(n)增加更多,其中n是两个分支变化的总和。 通常超过1个月,你必须有一个非常好的源代码管理系统,良好的代码接口/架构或者OCD开发者或者这三者的组合。

    项目中大约25%的时间应该致力于减少技术债务,其中主要包括重构代码。 特征分支是重构过程中的一个问题,因为重构前和重构后分支的合并可能非常困难。 出于这个原因,您希望在开始重构之前确保所有Feature分支都已合并。

    链接地址: http://www.djcxy.com/p/81721.html

    上一篇: Is Feature Branching still (or ever) considered a bad practice?

    下一篇: AWS cloudformation optional line