0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Git Flow应该抛弃的原因

汽车玩家 来源:雷锋网 作者:skura 2020-03-21 13:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

导语:或许,Git-flow 分支模型应该葬身火海 。

Git-flow 是一种分支和合并方法。十年前,因为一篇名为「一个成功的 Git 分支模型」的文章,Git-flow 变得广为人知。

在过去的十年里,无数团队被这篇博文蒙在鼓里。但我敢说,这篇文章撒谎了。

如果你读过这篇博文,你就会注意到,尽管作者声称他们在项目中成功使用了 Git-flow,但却故意避开了让项目成功的细节。

很多人会相信看到的博文,这其实是错误的。并非所有的策略都适用于所有情况,这是一个真理。我将同样的逻辑应用于这个分支模型。

好吧,你们当中的一些人不相信这个真理,所以让我们深入研究为什么 Git-flow 分支模型应该葬身火海。

Git-flow 的界面很复杂

Git-flow 特别复杂,甚至在考虑微服务或连续交付之前就已经如此了。下面的图片直观地展示了这一点:

Git Flow应该抛弃的原因

图片来源:https://nvie.com/posts/a-successful-git-branching-model/

这里有特性分支、发布分支、master 分支、dev 分支、一个紧急修复分支和 git 标记。这些都是在构建和发布过程中必须跟踪、理解和考虑的事情。

更重要的是,你还需要随时跟踪每个分支,这造成了很高的认知负荷。我已经使用 git 10 年了,我甚至不确定自己是否能在精神上跟上这里的发展。

Git-flow 违反了「短命」分支规则

在 git 中,随着在某个分支上工作人数的增加,发生合并冲突的次数将大大增加。在 Git-flow 中,这个数字增加得更多,因为还有三个具有不同生命周期的其他分支合并到开发中:特性分支、发布分支和紧急修复。合并冲突发生的可能性并不是线性变化的,它可能会使合并冲突的概率增加三倍。

这太糟糕了。

虽然我不敢说不采用 Git-flow 这样的分支策略就可以避免合并冲突,但是当所有这些分支组合在一起时,引入的潜在复杂性太大了,无法忽略。如果你们公司的代码提交速度很慢,那就没关系。但是对于任何快速迭代的组织或初创企业来说,情况并非如此。

Git-flow 放弃了rebase

重新定位合并节点是一个复杂的话题,但它很重要。如果你使用 Git-flow,你将不得不放弃 rebase。记住,rebase 取消了合并提交,你再也看不到两个分支组合在一起的节点。由于 Git-flow 的视觉复杂性,你需要可视化地跟踪分支,这意味着如果你想解决问题,就不需要 rebase。

Git-flow 使连续交付变得不可能

持续交付是一种实践。在这种实践中,团队以自动化的方式直接发布到生产中(实际上是合并到 master)。看看混乱的 Git-flow,你能解释一下如何持续地交付吗?

整个分支模型是根据可预测的、长期的发布周期进行预测的。如果每隔几分钟或几小时发布一次新代码,开销就太大了,更不用说 CD 的中心实践之一是向前滚动修复。Git-flow将修补程序视为一个单独的实体,需要小心地控制,并与其他工作分离开来。

在多个存储库中不可能使用 Git-flow

随着微服务的出现,micro-repo 的理念也得到了更多的推动,各个团队可以控制他们的存储库和工作流,他们还可以控制谁进入了他们的存储库以及其工作流是如何工作的。

你有没有尝试过这样一个复杂的分支模型:它有多个团队,并且希望它们都在同一个页面上?这是不会发生的。很快,这个系统就变成了不同 repo 的不同版本的一个清单,只有敲出 YAML 来更新清单的人知道所有东西在哪里。如果你不够细心,「在生产什么」就变成了一个存在主义的问题。

Git-flow 也不可能在 monorep 中使用

因此,如果由于协调发布的困难而取消了 micro-repo,那为什么不让所有微服务团队都遵守一个大的发布分支工作流呢?

这个过程大约持续 3.2 秒。如果团队是独立的,micro-repo 应该是独立部署的,这样就不能很好地将你的工作流程与你在 mono repo 中创建的集中式分支模型联系起来。

谁应该/不应该使用 Git-flow?

如果你的团队每月或每季度发布一次,并且是一个并行处理多个发布的团队,那么 Git-flow 可能是一个不错的选择。如果你的团队是一个初创企业,或者是一个面向 internet 的网站或 web 应用程序,同一天可能发布多个版本,那 Git-flow 对你来说就不合适了。如果你的团队是一个不到 10 人的微型团队,Git-flow 会给你的工作带来太多的规矩和开销。

另一方面,如果你的团队有 20 多人进行并行发布,那么 Gitflow 可以确保不会把事情搞砸。

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

我不能回答。并非所有分支模型都适用于所有团队和所有情况。如果你练习 CD,你需要一些尽可能简化过程的东西。

关键在于,团队需要反思:这个分支模型将帮助我们解决哪些问题?会产生什么问题?这种模型将鼓励什么样的发展?我们想鼓励这种行为吗?使用分支模型的最终目的都是方便软件开发过程中的合作,因此,需要考虑使用它的特定人群的需求,而不是互联网流传的「成功」的东西。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Git
    Git
    +关注

    关注

    0

    文章

    205

    浏览量

    16768
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    案例4:传导骚扰测试中应该注意的接地环路

    案例4:传导骚扰测试中应该注意的接地环路【现象描述】某信息技术设备有外接信号电缆及供电电源线。电源口传导测试时,EUT接地线就近接参考接地板,测试配置图如图2.24所示,测试结果如图2.25所示。由
    的头像 发表于 11-21 14:43 118次阅读
    案例4:传导骚扰测试中<b class='flag-5'>应该</b>注意的接地环路

    【润开鸿HH-SCDAYU800A开发板试用体验】+系统编译

    sudo apt install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev
    发表于 08-25 22:34

    FLOW Digital Infrastructure宣布在东京市中心新建数据中心

    平台FLOW Digital Infrastructure(简称"FLOW")宣布,其位于东京市中心的新数据中心已开工建设。该新数据中心由两栋建筑组成,分别命名为TK7和TK8,总IT负载达30MW。首
    的头像 发表于 07-31 17:31 479次阅读

    Git vs Perforce P4:版本控制系统选型指南(附适用场景、团队类型)

    Git适合小团队灵活开发,而Perforce P4更擅长管理大型项目与二进制资产。但你真的了解它们各自最适合的使用场景吗?或许不是“非此即彼”,而是“如何共存”,推荐一读!
    的头像 发表于 06-19 17:04 1073次阅读
    <b class='flag-5'>Git</b> vs Perforce P4:版本控制系统选型指南(附适用场景、团队类型)

    主流版本控制工具Git vs Perforce P4:架构模式、性能、大文件管理及分支管理对比详解

    Git vs Perforce P4,如何选型?架构模式、性能、大文件管理、分支策略四大维度对比,帮你全面了解两者的核心差异,选择更合适你团队需求的版本控制系统。
    的头像 发表于 06-13 14:52 575次阅读
    主流版本控制工具<b class='flag-5'>Git</b> vs Perforce P4:架构模式、性能、大文件管理及分支管理对比详解

    Intel为什么在2015年收购Altera?现在又为什么抛弃Altera

    在写这篇文章时,我想了很多标题,但总感觉没有哪个能把文章的意思全都总结清楚的,所以我又起了副标题:断臂求生的Intel。 要讲清楚Intel为什么要收购Altera,现在又为什么抛弃,需要从很多
    的头像 发表于 02-07 11:22 1277次阅读
    Intel为什么在2015年收购Altera?现在又为什么<b class='flag-5'>抛弃</b>Altera

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码

    我们前边已经介绍过Git工具,是一个非常实用的代码管理工具。如果验证编译出的内核能够正常启动,就可以将源码用git工具管理起来。可以清楚的了解源码改动记录。如果不小心把源码改乱了还可以进行版本
    发表于 01-23 10:51

    AMD Versal自适应SoC器件Advanced Flow概览(下)

    在 AMD Vivado Design Suite 2024.2 版本中,Advanced Flow 自动为所有 AMD Versal 自适应 SoC 器件启用。请注意,Advanced Flow
    的头像 发表于 01-23 09:33 1339次阅读
    AMD Versal自适应SoC器件Advanced <b class='flag-5'>Flow</b>概览(下)

    飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码

    我们前边已经介绍过Git工具,是一个非常实用的代码管理工具。如果验证编译出的内核能够正常启动,就可以将源码用git工具管理起来。可以清楚的了解源码改动记录。如果不小心把源码改乱了还可以进行版本
    发表于 01-22 10:39

    FinFet Process Flow-源漏极是怎样形成的

    本文介绍了FinFet Process Flow-源漏极是怎样形成的。 在FinFET制造工艺中,当完成伪栅极结构后,接下来的关键步骤是形成源漏极(Source/Drain)。这一阶段对于确保器件
    的头像 发表于 01-17 11:00 2503次阅读
    FinFet Process <b class='flag-5'>Flow</b>-源漏极是怎样形成的

    AMD Versal自适应SoC器件Advanced Flow概览(上)

    在最新发布的 AMD Vivado Design Suite 2024.2 中,引入的新特性之一是启用了仅适用于 AMD Versal 自适应 SoC 器件的 Advanced Flow 布局布线
    的头像 发表于 01-17 10:09 1164次阅读
    AMD Versal自适应SoC器件Advanced <b class='flag-5'>Flow</b>概览(上)

    FinFet Process Flow—哑栅极的形成

    本文主要介绍FinFet Process Flow—哑栅极的形成。   鳍片(Fin)的形成及其重要性 鳍片是FinFET器件三维结构的关键组成部分,它类似于鱼鳍的形状,因此得名。鳍片的高度直接决定
    的头像 发表于 01-14 13:55 2148次阅读
    FinFet Process <b class='flag-5'>Flow</b>—哑栅极的形成

    飞凌嵌入式ElfBoard ELF 1板卡-git管理源码之git安装和使用

    git是什么?git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件
    发表于 01-14 09:08

    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 Git 仓库,管理本地代码

    本篇文章通过部署 Gitea,实现本地 Git 仓库,真实体验了“云服务器 Flexus X 实例”,深感其卓越性能与灵活性。这款实例以其六倍于常的强劲算力,搭配旗舰级的操作体验,广泛适用于高科技
    的头像 发表于 01-07 16:59 750次阅读
    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 <b class='flag-5'>Git</b> 仓库,管理本地代码

    Flexus X 实例 C#/.Net Core 结合(git 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

    前言 ���云端部署新体验,C# Web API 遇上 Git Docker,828 B2B 企业节特惠来袭!Flexus X 实例,为您的 C#应用提供强大支撑,结合 Git 版本控制
    的头像 发表于 12-25 21:15 1012次阅读
    Flexus X 实例 C#/.Net Core 结合(<b class='flag-5'>git</b> 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~