写点什么

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

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

关注

评论 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
回复
没有更多了
  • 工作流设计:如何设计合理的多人开发模式?

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

    2021-06-08

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

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

    2019-11-05

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

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

    2023-11-15

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

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

    2023-05-16

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

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

    2022-04-14

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

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

    2019-12-17

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

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

    2021-12-02

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

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

  • 团队如何选择合适的 Git 分支策略?

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

    2023-07-11

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

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

    2022-01-11

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

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

    2019-11-07

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

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

    2023-06-07

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

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

    2021-06-12

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

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

    2022-03-28

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

    2021-01-07

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

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

    2023-02-13

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

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

    2023-06-01

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

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

    2022-04-29

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

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

    2022-02-15

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

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

    2023-05-17

发现更多内容

SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解

小万哥

MySQL 数据库 程序员 sql 后端开发

华为云耀云服务器L实例:中小企业数字化转型的加速器

轶天下事

关于 SLO,我们需要了解什么?

观测云

SLA SLO

极狐GitLab 16.6 如约而至,更好的 DevOps 体验,赶快升级使用吧!

极狐GitLab

DevOps gitlab CI/CD DevSecOps MR

Logic Pro X v10.8.1中文破解版 mac音频制作

Rose

mac音乐制作软件 Logic Pro破解版 Logic Pro下载

Open AI 砸了所有人的饭碗吗?

代码生成器研究

什么是真正的低代码?

代码生成器研究

华为云耀云服务器L实例:中小企业数字化转型的关键伙伴

轶天下事

低代码可以减少程序员哪些工作?

代码生成器研究

直播预告丨大模型如何在健康医疗中挖出大大的花?

京东科技开发者

人工智能 大模型

编程那么难,为什么不弄个大众一学就会的计算机

代码生成器研究

低代码就是不写代码吗?到底什么是真正的低代码平台?

代码生成器研究

加速数智化升级,华为云这款服务器让企业上云更轻松

轶天下事

企业上云请认准华为云这款服务器,数字化时代安全可靠的引擎

轶天下事

小程序开发新选择!华为云耀云服务器L实例快人一步

YG科技

华为云耀云服务器L实例:中小企业小程序开发的高效解决方案

YG科技

如何编译你的C程序 | AI工程化部署

AIWeker

c AI工程化部署

面向对象编程的弊端是什么?

代码生成器研究

2023 IoTDB 用户大会倒计时 3 天 | 1 分钟让你了解 IoTDB!

Apache IoTDB

带键扫的LED专用驱动方案

芯动大师

项目管理必备的时间轴软件!这10款协同工具有口皆碑。

彭宏豪95

项目管理 效率工具 在线白板 办公软件 绘图软件

MongoDB助力腾讯游戏 优化游戏开发体验

技术咖和技术渣

用户注册这样玩,保你平安

越长大越悲伤

Java 后端 注册

Mac视频转码编辑工具 Compressor 4.7中文激活版 现已支持M3 Mac

Rose

Compressor Mac下载 Compressor破解版 Mac视频编码工具 Compressor for mac

音视频FAQ(一):视频直播卡顿

ZEGO即构

CDN RTC 实时音视频 音视频技术 直播间

大模型+搜索:一盘跳棋和三位选手

脑极体

AI

华为云耀云服务器L实例:企业建站与小程序开发的新纪元

YG科技

低代码平台在数字化转型过程中的定位

明道云

咨询+低代码,强强联合为制造业客户赋能

明道云

StarRocks 存算分离最佳实践,让降本增效更简单

StarRocks

数据库 数据分析 StarRocks

稳定可靠,华为云服务器引领数字化时代

YG科技

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