写点什么

别再推荐 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:2115119
用户头像
小智 让所有人认同的文字称不上表达

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

关注

评论 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
回复
没有更多了
  • 团队如何选择合适的 Git 分支策略?

    现代软件开发过程中要实现高效的团队协作,需要使用代码分支管理工具实现代码的共享、追溯、回滚及维护等功能。目前流行的代码管理工具,包括CVS,SVN,Git,Mercurial等。

    2023-07-11

  • 工作流设计:如何设计合理的多人开发模式?

    今天我们来聊聊如何设计合理的开发模式,我会为你介绍4种受欢迎的工作流,你可以选择其中一种作为你的工作流设计。

    2021-06-08

  • 如何通过云效 Codeup 高效落地分支模式,提升开发协作率

    分支模式是我们在进行代码变更时的一种约定,它在版本管理工具(如Git)之上,约定我们在不同分支上的行为,达到提升开发协作效率的目的。云效Codeup 是一款企业级代码管理平台,提供代码托管、代码评审、代码扫描、质量检测等功能,全方位保护企业代码资产,

    2022-04-14

  • 20 个 Git 命令玩转版本控制

    想要在团队中处理代码时有效协作并跟踪更改,版本控制发挥着至关重要的作用。Git 是一个版本控制系统,可以帮助开发人员跟踪修订、识别文件版本,并在必要的时候恢复旧版本。Git 对于有一定编程经验的用户来说虽然不算太难,但是想要玩转一些高级功能也并不是

    2023-02-13

  • 持续集成:你说的 CI 和我说的 CI 是一回事吗?

    今天,我们来聊一聊CI落地建设的三个阶段和其中的核心理念,即快速集成、质量内建和文化建立。

    2019-11-07

  • Git 分支教程:详解分支创建、合并、删除等操作

    Git是一种强大的分布式版本控制系统,它的分支功能使得团队协作和代码管理变得更加灵活和高效。分支可以让开发人员在不影响主线开发的情况下进行并行开发和实验性工作。本篇博客将详解Git分支的创建、合并、删除等操作,帮助你更好地理解和使用Git的分支功能

    2023-06-01

  • Git 进阶(三):webstorm 的 git 切换分支

    项目根目录 -> Git -> Repository -> Brabches

    2021-12-02

  • 研发流程设计(下):如何管理应用的生命周期?

    今天,我从技术演进的维度介绍了应用生命周期管理技术,这些技术可以提高应用的研发效率和质量。

    2021-06-12

  • 以终为始,依托度量指标,多种工具全面提升研发效能

    高效能是企业取得成功的关键要素之一,通过提升团队的效能,可以实现更高质量的工作成果、更快速的产品交付和更好的客户满意度。然而,在追求效能提升的过程中常常面临很多痛点。

    2023-11-15

  • 什么是分支模式 ? 各 (类) 分支正确的使用方式

    什么是分支模式 ? 本节内容详细介绍分支模式下,各(类)分支的使用方式。在使用分支模式过程中用户可以只需要关心集成和发布哪些 feature 分支,而对 release 分支创建和管理、分支合并等一系列工作,可以托付给云效 Flow来 完成。能够很好的节省我们的时间,

    2022-03-28

  • 多分支集成发布各种坑怎么填?

    小明的研发团队要发布一个版本,这个版本包含了多个功能特性,每个不同的特性之间有较强的独立性。不同的特性由不同的开发人员或开发小组分工完成。

    2022-04-29

  • 当“代码农”遇上“码农”:揭秘主干开发的那些事儿 | 京东云技术团队

    前段时期我负责部门内部主干开发落地相关事宜,这个过程中,也真真切切的体会到了多人开发过程中,面对特性分支管理中,大家遇到的一些困扰,尤其面对敏捷迭代的开发方式,合并冲突,集成测试,代码重用等方面,都与高效两个字背离。当然,我在推进主干开发过

    2023-06-07

  • 平台产品研发:三个月完成千人规模的产品要怎么做?

    关于如何开发产品,在这一讲中,我会把我自己在过去几个项目经历中的经验总结全部分享给你。

    2019-12-17

  • Git 代码分支管理 | 京东云技术团队

    不少团队内的新同学对 git 分支的命名和管理方式有些许的模糊,分支的命名规范以及管理方式对项目的版本发布至关重要,为了解决实际开发过程中版本发布时代码管理混乱、冲突等比较头疼的问题,我们将在文中阐述如何更好的管理代码分支。

    2023-05-17

  • AIGC 背后的技术分析 | 知识图谱

    简介: 知识图谱是知识工程的一个分支,以知识工程中语义网络作为理论基础,并且结合了机器学习、自然语言处理以及知识表示和推理的最新成果,在大数据的推动下受到了业界和学术界的广泛关注。知识图谱对于解决大数据中文本分析和图像理解问题发挥了重要作用

    2023-05-16

  • 云效 Flow 如何实现阿里云 ECS 多环境发布

    在软件开发和部署过程中,我们的软件需要在不同的运行环境中运行,例如:开发人员本地开发环境、测试团队的测试环境、还有类生产环境和生产环境。在整个研发流程的过程中如何通过云效流水线有效拉通开发与运维,打破二者之间的壁垒墙,让开发与运维高效联动。

    2022-02-15

  • 移除 Staging 环境,加快部署过程

    Squeaky是一家在不侵犯用户隐私的情况下帮助企业了解用户如何访问他们的网站或Web应用程序的公司,它采用了不一样的做法,并解释了为什么他们不使用Staging环境。他们相信这有助于他们更快地发布产品,并减少生产环境中的Bug。

  • 分支策略:让研发高效协作的关键要素

    分支策略就是研发协作和发布模式的风向标,找到适合当前团队的分支策略,是非常重要的事情。

    2019-11-05

  • 技术干货 | ToB 业务场景下自动化测试的实践及探索

    ​在 ToB 业务快速迭代与新版本发布过程中,开发和 QA 提测面临着大量人工测试场景,本文就 ToB 业务场景下面临的测试难题,结合网易云信自动化测试的实践进行了探索。

    2022-01-11

  • 云环境中的持续集成:CI/CD 的工作流程

    2021-01-07

发现更多内容

自建还是第三方?华为云对象存储服务OBS 成为企业更优选

IT科技苏辞

华为云OBS对象存储,一站式解决企业数据存储难题

科技怪授

“互联网+”的时代,华为云如何助力企业处理海量数据?

科技怪授

OBS

稳定可靠、安全可信的云存储-华为云OBS对象存储

IT科技苏辞

华为云大数据-助力数据价值化,释放企业发展潜能

科技之光

金航数码选择应用 TDengine 时序数据库,改造现有数据库架构

TDengine

数据库 tdengine 时序数据库

企业数字化转型难?华为云大数据BI帮你一站式上云

科技之光

【12.23-12.30】写作社区优秀技术博文回顾

InfoQ写作社区官方

热门活动

拒绝等待,华为云CDN下载加速就是要快人一步

科技说

存储无忧!华为云OBS为企业数据存储保驾护航

科技怪授

OBS

暴雪、迪士尼大佬用什么画画?RayLink远控软件助力解锁远程创作

RayLink远程工具

远程控制软件 远程办公软件 远控软件 RayLink

支撑20亿+用户变美,看华为云OBS对象存储服务与美图的合作

IT科技苏辞

墨菲安全软件供应链安全产品v3.0正式公测之产品特性简介及用户升级说明

墨菲安全

软件成分分析 开源安全 墨菲安全 软件供应链安全

建木v2.6.2发布

Jianmu

开源 DevOps 持续集成 低代码 CI/CD

年终有奖 | 三分钟,一起创造更好的 StarRocks!

StarRocks

企业号1月PK榜,火热开启!

InfoQ写作社区官方

热门活动

打造全链数据营销服务,华为云助力车企业务增值

科技之光

Dubbo 3 之 Triple 流控反压原理解析

Apache Dubbo

Java 开源 微服务 gRPC dubbo

云上提速哪家强?华为云CDN加速成首选!

科技说

不愧是阿里内部供应的Kafka笔记,深入浅出,全是干货

小小怪下士

Java kafka 程序员

打破工业发展瓶颈,华为云赋能工业企业转型成效显著!

科技之光

数字化转型如何更方便?华为云大数据BI解决方案来了!

科技之光

「复享光学」用深度光谱技术推动光与电的变革

硬科技星球

接口自动化测试不想写代码?这款工具强烈推荐

叶小柒

测试 Postman

数据存储难?华为云对象存储服务OBS带你全方位解决

IT科技苏辞

专属企业的加速“小帮手”——华为云CDN

科技说

海纳百川,华为云对象存储服务OBS给你无限可能

科技怪授

OBS

华为云OBS,企业数据存储的信赖之举

科技怪授

OBS

【华为云大数据BI】做好数据化管理,加快企业数字化转型的节奏

科技之光

如何快速建立商业智能系统?华为云告诉您!

科技之光

华为云CDN下载加速,“火速”留住用户

科技说

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