【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

别再推荐 Git Flow 了

  • 2020-03-11
  • 本文字数:1936 字

    阅读完需:约 6 分钟

别再推荐Git Flow了

写在前面

十年前,一篇名为《一个成功的 Git 分支模型》的文章将 Git Flow 推上了风口浪尖。在过去的十年里,无数个开发团队被这篇文章蒙在鼓里。说得严重一点,他们都被骗了。


文章的作者宣称他们已经成功地将 Git Flow 引入到项目中,但对于如何在项目中取得成功的细节却只字未提。


如果我们盲目地相信这篇文章所说的内容,那无疑是一个巨大的错误。我们必须承认,并不是所有的策略都适用于所有的情况、所有的人、所有的环境,而这个道理对于这个分支模型同样适用。


为了更有说服里一点,让我们来更深入地探究一下为什么我们应该让 Git Flow 分支模型葬身火海。

Git Flow 太复杂了

Git Flow 太复杂了,看看下面这张图,它已经很直观地说明了这一点:



这里有功能分支、发布分支、主干、开发分支、紧急修复分支和标签。在构建和发布过程中,你必须跟踪这些东西,还得理解它们,记得它们。


不仅如此,你还需要从头到尾跟踪哪个分支是用来干什么的,这对于你来说是一个很重的认知负担。我已经使用 Git 十年了,我甚至都不确定自己的脑力是否能够承担得了这些东西。

Git Flow 违背了分支的“短命”原则

在使用 Git 时,在同一个分支上开发代码的人越多,出现合并冲突的几率就越高。在使用 Git Flow 后,冲突几率会变得更高,因为还有三个其他的分支(具有不同的生命周期)会合并到开发分支上:功能分支、发布分支和紧急修复分支。现在,出现合并冲突的可能性不是线性的,而是呈三倍的数量增长。


虽然我不愿意说“担心出现合并冲突”是不想采用 Git Flow 分支策略的原因,但当所有这些分支聚集在一起,它们所引入的潜在复杂性是我们无法忽视的。如果你所在的企业提交代码的速度比较慢,或许没什么问题,但对于需要快速开发的企业或初创公司来说,情况就不一样了。

Git Flow 抛弃了 rebase

如果你要使用 Git Flow,就得放弃 rebase。rebase 取消了合并提交——也就是可以看到两个分支合并的地方。由于 Git Flow 的复杂性,你需要可视化跟踪分支,这意味着如果你想要看到来龙去脉,就不能使用 rebase。

Git Flow 阻碍了持续交付

持续交付是指开发团队的每次代码提交都会以自动化的方式(在实际当中是与主干合并)直接发布到生产环境中。看看这一团糟的 Git Flow,你倒是说说如何能够进行持续交付?


Git Flow 分支模型是基于可预测的长期发布周期,而不是基于每隔几分钟或几小时就要发布新代码的场景。这种发布方式的开销太大了。另外,持续交付的一个核心实践是通过修复的方式进行发布,而 Git Flow 将紧急修复作为一个单独的实体,并与其他开发工作分开。

Git Flow 无法应对多代码库

随着微服务的崛起,小型代码库的想法也得到了更多的推动。个体开发团队可以控制他们的代码库和工作流,他们可以控制谁能够向他们的代码库提交代码以及他们的工作流如何工作。


你有没有尝试过使用像 Git Flow 这样的分支模型,并希望每个人都能达成一致?这是不可能的。很快,系统就会出现不同版本的代码库,唯一知道一切的人是使用 YAML 来更新清单的人。你一不小心就很难知道“生产环境中究竟包含了哪些东西”。

Git Flow 无法应对大型单代码库

如果因为版本发布协调困难而无法使用多个微代码库,那为什么不使用一个单独的大型分支工作流,让所有的微服务团队都使用这个工作流?


这种方式在一小段时间内或许是可以的,直到一个开发团队要发布版本而其他团队还没有准备好。如果开发团队是独立的,微服务也是独立部署的,那就不能将你的工作流很好地与这种分支模型结合在一起。

谁应该(或不应该)使用 Git Flow?

如果你所在的公司采用了月度或季度发布周期,并且由一个团队负责并行开发多个项目,那么 Git Flow 可能是一个不错的选择。如果你所在的公司是一个初创公司,或者开发的是一个网站或 Web 应用程序,在一天内可能需要发布多个版本,那么使用 Git Flow 对你来说没有什么好处。如果你的团队规模很小(10 人以下),Git Flow 会给你的带来太多冗繁的工作。


但如果你的团队有 20 多人并行开发多个版本,那么使用 Git Flow 可以确保你们不会把事情搞砸。

如果不使用 Git Flow,那应该用什么?

这个问题我回答不了。并不是所有的分支模型都适用于所有的团队、所有的环境和所有的文化。如果你采用了持续交付,你会想要一些能够尽可能简化交付过程的东西。有些人喜欢基于主干的开发模式,喜欢使用特性标志。然而,从测试的角度来看,这些反而会把我吓一跳。


关键在于你要问你的团队:这种分支模型可以帮助你们解决哪些问题?它会带来哪些问题?这种模式为哪种开发提供更好的支持?你们想要鼓励这种行为吗?你选择的分支模型最终都是为了让人们更容易地进行软件协作开发,因此,分支模型需要考虑到使用者的需求,而不是盲目听信某些人在网上所声称的“成功的分支模型”。

英文原文

Please Stop Recommending Git Flow


2020-03-11 14:2113854
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 377.3 次阅读, 收获喜欢 1972 次。

关注

评论 7 条评论

发布
用户头像
毫无意义+1
2023-09-18 09:50 · 江西
回复
用户头像
GP不通. 吃饭还会噎死呢. 干脆不吃饭吧
2020-11-05 14:27
回复
用户头像
如果你只是单纯反对一个东西而不提出替代方案,那你的反对毫无意义
2020-10-13 15:44
回复
用户头像
什么GP文章……
2020-03-25 13:59
回复
用户头像
gitflow 显然不是适合每一个场景的,然而现有的工作流程gitflow也是无可替代的
2020-03-23 09:57
回复
用户头像
这作者既然脑力有限,无法理解 gitflow,就何必还要基于自己错误的理解来进行批判…
2020-03-16 09:58
回复
用户头像
如果没有更好的标准,那就按照 Git Flow 来。文章作者的意思绝对不是要对 Git Flow 生搬硬套,应用到实际项目中可以修改。
2020-03-15 15:04
回复
没有更多了
发现更多内容

LED显示屏由什么组成?

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

LP流动性质押挖矿dapp系统开发详情(案例演示)

开发微hkkf5566

戴尔Precision 3660工作站:设计师手里的金刚钻

科技热闻

SUSE 推出业界首个自适应 Linux 平台原型

Anthony

Linux 自适应

3DCAT教育合作伙伴招募 | 价值80w权益等你来,立享最高级别技术支持

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

邂逅Vue3

渔戈

前端 Vue3 10月月更

Java读取csv文件的三种方式

技能实验室

10月月更

长安链源码分析之网络模块 net-liquid(5)

云安全和传统安全有什么区别?又有什么关系?

行云管家

网络安全 数据安全 云安全

戴尔Latitude5000——回归职场初心

科技热闻

创新引擎,值得信赖的生产力工具PowerEdge T550塔式服务器

科技热闻

Vue响应式系统原理并实现一个双向绑定

yyds2026

Vue

Vue模板是怎样编译的

yyds2026

Vue

华为架构师亲手操刀,世界五百强都在用的kafka也就那么回事

程序知音

Java kafka 架构 后端技术

电网攻击频发,云原生架构正在成为众矢之的

青藤云安全

网络安全 主机安全 青藤云安全

Springboot项目启动后获取配置属性

技能实验室

10月月更

工作四年,靠这份Java面试宝典,跳槽到阿里,月薪直涨12K

收到请回复

Java 面试 语言 & 开发 金九银十

国家级认证!青藤获得安全运营类一级资质

青藤云安全

网络安全 主机安全 青藤云安全

文本识别与检测-【技术白皮书】第三章-第二节: 基于分割的场景文本检测方法

合合技术团队

人工智能 神经网络 文字识别 自然语言理解

两折!3DCAT实时渲染云超强算力帮你玩转元宇宙

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

等保合规是什么意思?怎么做?

行云管家

网络安全 等保 过等保 等保合规

长安链源码分析之网络模块 net-liquid(6)

Vue3的基本指令

渔戈

前端 Vue3 10月月更

navicat的使用与数据库的DML操作

渔戈

MySQL SQL语句 10月月更

专访超次元|这家头部虚拟赛道公司,如何借助3DCAT加速元宇宙建设?

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

随需应变,快速开发工作流

力软低代码开发平台

分析服务用多维度、多场景的用户分层,带您深度玩转精细化游戏运营

HMS Core

分析

长安链源码分析之网络模块 net-liquid(7)

戴尔Latitude 3330,实用办公党,解放双肩包

科技热闻

Vue组件是怎样挂载的

yyds2026

Vue

30+场技术论坛 1000+科技新品发布 今年云栖大会我们关注什么?

阿里技术

云栖大会

别再推荐Git Flow了_文化 & 方法_George Stocker_InfoQ精选文章