Version control 要素切换与要素分支

Version control 要素切换与要素分支,version-control,continuous-integration,feature-branch,featuretoggle,Version Control,Continuous Integration,Feature Branch,Featuretoggle,“特征切换”和“特征分支”是什么?它们之间有什么区别 利与弊是什么?为什么一个比另一个好 我在谷歌上找到了一些关于这方面的文章,我倾向于“功能切换”阵营,但我不认为“功能切换”在所有情况下都是更好的选择。功能切换是在持续集成/持续交付(CI/CD)链(敏捷/看板项目方法)中使用的方法。基本上,您可以在禁用状态下向生产部门发送新功能,然后在管理控制台中打开(如果发现该功能已损坏,则关闭) 功能分支可以是发布方法的一部分,并集成到持续集成链中。您可以在功能分支中开发,将分支部署到DEV/QA,获得认

“特征切换”和“特征分支”是什么?它们之间有什么区别

利与弊是什么?为什么一个比另一个好


我在谷歌上找到了一些关于这方面的文章,我倾向于“功能切换”阵营,但我不认为“功能切换”在所有情况下都是更好的选择。

功能切换是在持续集成/持续交付(CI/CD)链(敏捷/看板项目方法)中使用的方法。基本上,您可以在禁用状态下向生产部门发送新功能,然后在管理控制台中打开(如果发现该功能已损坏,则关闭)

功能分支可以是发布方法的一部分,并集成到持续集成链中。您可以在功能分支中开发,将分支部署到DEV/QA,获得认证,将功能分支合并到主干,然后将主干推送到SIT/UAT/PROD环境

这种方法有优点也有缺点。特性切换需要非常严格的规则,因为坏代码/暗代码正在进入生产。这对于管理层知道如何实现这一点并拥有系统自动化工具(Chef/Puppet/cfengine等)的初创公司和商店来说是非常好的。Google、Facebook、LinkedIn、WordPress都使用功能切换和系统自动化部署到生产环境中

有一些先决条件“技术”可以正确切换功能:连续交付/部署、连续集成、自动单元测试、自动集成测试、自动压力/性能测试、系统自动化。如果没有这些,考虑一个更简单的发布策略(例如,特征分支)

特性切换需要非常严格的规则,因为坏代码/暗代码是 使其投入生产

我同意Electrawn,我已经使用特性分支6年了,因为在我们的例子中,我们没有预先要求

同样重要的是要理解“Toogle策略”将花在特性分支策略(合并)上的精力转移到另一个时刻

一旦挂起的特性在生产中稳定下来,停用切换是非常重要的。 这涉及到删除配置文件上的定义以及使用这些定义的所有代码。 否则你会得到一堆没有人记得如何使用的开关。在我听说的一个难忘的例子中, 它需要对linux内核进行特殊的重新编译,以处理足够的命令行切换

注意:遵循SCM原则,如果有人打开并编辑文件,可能会导致代码中断

所以,在我看来,我不相信“在所有情况下都有更好的选择”,因为这取决于你的团队文化以及你是否有测试覆盖

这是一个非常有争议的问题

在我的案例中,我仍然更喜欢功能分支策略。保持SCM最佳实践并规划路线图,合并过程往往是一种简单的方法。 在这一年中,我听到很多人抱怨合并过程,但在很多情况下,合并的问题与我的经验相同,“沟通失败”:


很抱歉回答不准确,但我认为在SCM中,围绕这个主题有一些人类方面是更好的选择。

我在我的博客上深入讨论了这一点:

简言之,功能分支将为您提供更好的隔离,但需要您处理延迟集成和合并的痛苦。切换提供了持续集成,但要求您以支持切换的方式设计/实现代码,并引入未完成的功能部件代码可能会对生产产生负面影响的风险

您可以同时使用分支和切换(它们不是互斥的)。至于决定在每个场景中使用哪一个,我的想法是切换应该是默认选择,除非以下是正确的:

  • 很难隐藏切换背后的功能
  • 对未进行彻底测试的应用程序区域有潜在影响

如果这两个条件中的任何一个是真的,我可能会使用功能分支而不是切换。

除了下面的答案之外,还有两件事:你不能同时拥有功能分支和连续集成(除非你为每个功能分支设置自动构建),如果你决定使用功能分支,请使用GIT武装自己(或类似)具有强大的合并功能。我还建议您阅读Jez Humble的《持续交付》一书。@spacedoom:“您不能同时拥有功能分支和持续集成”-我不同意。许多CI解决方案都明确支持构建功能分支。例如,Jenkins甚至可以为它在SCM中检测到的任何功能分支自动创建构建作业。更多信息非常好的博客文章。感谢分享似乎大多数人都认为集成必须始终在单个方向上进行
功能分支ch->main
。我看到很多成功的做法都是相反的,通过将
main
中的最新版本拉到
feature分支
中来持续集成,这样在您需要集成回
main
时,您的合并是一个快速推进的合并,因此没有痛苦。我构建了一个简单的包,可以轻松隐藏e切换背后的各种功能我认为最后一段是倒退的:“以下是正确切换功能的先决条件“技术”:持续交付/部署、持续集成、自动单元测试、自动集成测试、自动压力/性能测试、系统自动化”,功能切换是能够制作CI/CD的先决条件,而不是反过来。至少这是我从阅读中获得的。我有点不同意最后一段。建议您需要运行所有这些结构,然后才能进行功能切换(并获得所有很棒的“get stuff to prod no