git分支策略(github-flow VS git flow,如何选择)

news2025/3/17 4:10:39

一. 结论

Github flow:最简单

小型项目,持续部署,自动化测试程度高,发布流程简单

Git flow:复杂但最常用

大型项目,发布周期长,需要同时维护多个版本,发布流程复杂

表格提供了不同情况下推荐采用的分支策略,帮助团队根据自己的特点和需求选择最合适的工作流程。

例如在自动驾驶软件开发中,软件生命周期长达 1-2 年,需同时维护多个平台的开发,需要经过严格的测试环节才能发布。所以会基于 git flow 做分支管理。

二. github-flow VS git-flow

1. Github Flow

多用于 Web 应用程序这种持续交付的项目模式,一般不必支持运行多个版本的软件

1.1 github-flow 框架

从图中可知, Github Flow 只有两个分支:

(1)Master(main): 主分支包含该项目的所有可直接用于发布部署的代码

(2)Feature: 开发人员直接从 main 分支出来开发新功能的分支

1.2 github-flow 工作流程

GitHub 就是采用 GitHub Flow 方式的,它的流程大致流程如下:

(1)在新项目开始时会创建一个空的主分支

(2)每个更改都直接从主分支分支切出来到功能分支

(3)一旦某个功能准备就绪,就会在功能分支进行测试,并对代码进行审查

(4)最后, 该功能被合并到主版本中,可以立即发布到生产环境中

1.3 github-flow 优缺点

1.3.1 优点

  • 允许持续交付和部署

  • 鼓励团队快速发布并获得有关他们所做工作的反馈

  • 分支管理简单。除了 feature 分支外,几乎不需要任何分支管理

1.3.2 缺点

  • 需可靠的自动化测试框架和自动化发布流程

  • 不太适合多个开发人员需要并行开发的复杂功能

  • 需要谨慎,因为合并到 main 中的任何错误都将直接进入生产

1.4 github-flow 适用情况
  • 小型到中型项目:项目规模较小,功能模块较少,或者团队较小

  • 持续部署:产品需要频繁更新,可能每天都有新的部署

  • 简单的发布流程:发布流程简单,不需要复杂的测试和多环境部署

  • 自动化测试:有成熟的自动化测试流程,可以快速验证代码质量

1.5 github-flow 举例(web 应用)

在一个小型的 Web 应用中,需频繁更新以修复 bug 或添加小功能。使用 GitHub Flow,你可以这样管理代码:

  1. master 分支:始终处于可部署状态,是最新的稳定版本

  2. feature 分支:为每个新功能或修复创建 feature 分支,从 master 拉取

  3. Pull Request:完成开发后,发起 Pull Request,请求将 feature 分支合并回 master

  4. Code Review:其他团队成员审查 Pull Request,提供反馈或批准

  5. 自动化部署测试:Pull Request 提交后,自动运行测试,确保代码质量

  6. Deployment:一旦 Pull Request 被批准且所有测试通过,合并回 master 并部署到生产环境

2. Git Flow

Git Flow 是最常用的分支管理策略

如果采用敏捷开发(Scrum)模式, 开发周期将围绕版本发布进行

此外,如果依靠 QA(质量保证) 在代码投入生产之前对其进行手动测试,这种情况下可以使用 Git Flow

2.1 gitflow 框架

如图所示, Git Flow 围绕多个分支工作。

(1)master 分支:用于存放稳定且发布版本的代码

(2)develop 分支:用于日常开发,所有新的功能分支都从这里开始

(3)feature 分支:为每个新功能创建的分支,完成后合并回 develop 分支

(4)release 分支:从 develop 分支创建,用于准备发布版本。当准备就绪后,会合并回 master 和 develop 分支

(5)hotfix 分支:从 master 分支创建,用于修复紧急问题,完成后合并回 master 和 develop 分支

2.2 gitflow 工作流程

(1)创建 main 分支. 对于新项目,首先创建一个主分支并保留为空,只保留 README.md 文件

(2)创建 develop 分支. 开发分支立即从主分支中切出来. 一般不会直接对 main 或 development 进行任何更改

(3)创建 feature 分支. 开发人员将从 develop 切出一个分支来进行更改

(4)将 feature 分支合并到 develop 分支. 在 feature 分支更改完成后,创建 (PR),并对其进行审查, 对冲突进行修改

(5)创建发布分支. 一旦 feature 合入 develop 完成,将从 develop 分支切出来 release 分支。然后质量检查团队会在该版本准备好投入生产之前对其进行测试。与此同时,开发人员可以继续在 develop 分支上开发下一个版本的功能

(6)正式发版. 发版通常要么从 release 分支创建,要么在 release 分支合并到 main 分支后从 main 创建。如果您从 main 发布,则存在您发布的内容与 QA 测试的内容不同的风险

(7)如果发现 release 的发行版存在问题,通常会在 main 分支上创建一个分支来进行修复

2.3 gitflow 优缺点

2.3.1 优点

  • 并行处理。允许并行处理多个版本

  • 易于跟踪。提供清晰的版本控制,每个版本都经过标记并单独测试

  • 允许多个开发人员开发同一功能。既可以交替提交半成品,又可以基于 feature 分支再次拉取分支开发

  • 容易切换。允许在当前版本和未来版本的工作之间跳转,因为它们位于不同的分支路径上

2.3.2 缺点

  • CICD不友好。不适合持续交付或持续部署

  • 维护困难。许多分支需要维护,经常要将分支做合并, 以保证保持一致性

  • 工作量大。由于发布工作较重,技术人员有不少工作量

2.4 gitflow 适用情况
  • 大型项目:项目规模较大,功能模块多,需要协调多个团队或多个发布周期。

  • 长期发布周期:产品发布周期较长,可能几周或几个月发布一次正式版本。

  • 需要维护多个版本:需要同时维护多个版本的软件,例如稳定版、测试版和开发版。

  • 复杂的发布流程:发布流程复杂,涉及到多个阶段的测试和多个环境的部署。

2.5 gitflow 举例(大型桌面应用)

假设开发一个大型的桌面应用程序,该程序每季度发布一个新版本。使用 Git Flow,你可以这样管理代码:

  1. main 分支:保持最新稳定版本,仅用于发布

  2. develop 分支:日常开发的基础,所有新功能都从这个分支开始

  3. feature 分支:开发新功能时,从 develop 创建 feature 分支,完成后合并回 develop

  4. release 分支:准备发布新版本时,从 develop 创建 release 分支,进行最后的测试和修改

  5. hotfix 分支:当需要紧急修复线上问题时,从 master 创建 hotfix 分支,修复后合并回 master 和 develop

三. 参考资料

  1. git flow

  2. GitHub flow

  3. A successful Git branching model

  4. Git Flow vs GitHub Flow

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1694794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

36PE启动盘新秀:Ventoy(附各种PE的ISO下载)

PE启动盘新秀:Ventoy(附各种PE的ISO下载) 在我们以前的认知中,一个U盘只能制作包含一个系统的启动盘.比如,安装了微PE工具箱的U盘就不能安装其他什么PE工具箱了.这有时候让我们很无奈,只能买好多U盘,一个U盘一个PE系统. 这个问题的本质是什么?事实上,笔者认为,就是单个的ISO文…

Andoird使用Room实现持久化及使用Room进行增删查改

文章目录 Room概述Room的使用一、在gradle.build中添加依赖库kotlinJava 创建实体类创建抽象Dao层接口创建DataBase层使用创建的查看数据库 总结: 这篇文章会告诉你如何在Android中通过kotlin或者Java来实现数据持久化 Room概述 处理大量结构化数据的应用可极大地受…

2024年【N1叉车司机】考试题及N1叉车司机找解析

题库来源:安全生产模拟考试一点通公众号小程序 N1叉车司机考试题参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总,相对有效帮助N1叉车司机找解析学员顺利通过考试。 1、【多选题】《特种设备使用…

FreeRTOS 源码概述

FreeRTOS 目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工程中,FreeRTOS 相关的源码如下: 主要涉及2个目录: Core Inc 目录下的 FreeRTOSConfig.h 是配置文件 Src 目录下的 freertos.c 是 STM32CubeMX 创建的默认任务 Middlewares\Third_Party…

深入解析编程逻辑中的关键字与逻辑运算

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、认识关键字及其重要性 二、逻辑运算的关键字 1. and、or 和 not 的运用 2. 逻辑运算的…

42-3 应急响应之服务排查

一、服务排查 服务是后台运行的进程,可在计算机启动时自动启动,也可暂停和重新启动,且不显示用户界面。它们特别适用于长时间运行的功能,以避免影响其他用户在同一台计算机上的工作。在应急响应中,服务常被恶意软件用作驻留方法。 二、Windows服务排查 打开【运行】对话框…

【独家揭秘!玩转ChatGPT?一文带你解锁秘籍!】

🚀【独家揭秘!玩转ChatGPT?一文带你解锁秘籍!】🚀 👉 【直达ChatGPT体验站】 ChatGPT,全称“Chat Generative Pre-trained Transformer”,是人工智能研究实验室OpenAI于2022年底推出…

9.2 Go语言入门(包和导入)

Go语言入门(包和导入) 目录一、包和导入1. 包(Package)1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入(Import)2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

第四课 communcation服务-can配置第二弹

Davinci配置目标: 介绍DBC基本属性,并且配置出一个DBC。 将DBC导入到vector的davinci工具,生成我们想要的代码。 Davinci配置步骤: 1. 编辑DBC文件 DBC文件是一种非常重要的工具,所谓DBC就是Database CAN,CAN网络的数据库文件,定义了CAN网络的节点、消息、信号的所有…

查看远程桌面连接登录不上服务器,远程桌面连接登录不上服务器是什么情况?怎么解决?

在信息技术领域,远程桌面连接(RDP)是一种重要的远程管理工具,它允许管理员或用户从远程位置访问和控制服务器或计算机。然而,在实际操作中,远程桌面连接不上服务器的情况时有发生,这通常是由多种…

Redis 完整

Redis 什么是 redis ? 是一种基于键值对的 NoSql 型数据库。与 hashMap 不同的是,Redis 中的 value 支持 string(字符串)、hash(哈希)、 list(列表)、set(集合)、zset…

Kafka(十三)监控与告警

目录 Kafka监控与告警1 解决方案1.2 基础知识JMX监控指标代理查看KafkaJMX远程端口 1.3 真实案例Kafka Exporter:PromethusPromethus Alert ManagerGrafana 1.3 实际操作部署监控和告警系统1.2.1 部署Kafka Exporter1.2.2 部署Prometheus1.2.3 部署AlertManger1.2.4 添加告警规…

3D透视图转的时候模型闪动怎么解决?---模大狮模型网

在3D建模与渲染的世界中,透视图是我们观察和操作模型的重要窗口。然而,有时候在旋转透视图时,模型会出现闪动的现象,这不仅影响了我们的工作效率,还可能对最终的渲染效果产生负面影响。本文将探讨这一问题的成因&#…

【Text2SQL 经典模型】HydraNet

论文:Hybrid Ranking Network for Text-to-SQL ⭐⭐⭐ arXiv:2008.04759 HydraNet 也是利用 PLM 来生成 question 和 table schema 的 representation 并用于生成 SQL,并在 SQLova 和 X-SQL 做了改进,提升了在 WikiSQL 上的表现。 一、Intro…

WGCAT工单系统如何配置通知

WGCAT工单系统可以配置邮件通知 只要配置了邮件通知,那么一旦我们账号有新的工单需要处理,就会接受到邮件通知 除了邮件之外,还可以配置其他方式的通知,比如微信钉钉短信等方式,参考如下 https://www.wgstart.com/wgc…

Docker常用软件安装

文章目录 1.安装Tomcat1.docker hub查找镜像并复制拉取镜像命令2.拉取镜像到本地1.执行官网命令2.查看是否拉取成功 3.启动tomcat4.退出和重启1.由于是以交互方式启动的,所以不方便,直接ctrl c退出2.查看当前的容器3.使用docker start 命令启动容器&…

内外网文件传输安全可控的方式有哪些?这几款软件值得参考

在信息化时代,随着企业对网络安全和数据保护需求的日益增强,内外网隔离已成为一种常见的网络安全策略。内外网隔离旨在防止未经授权的访问和数据泄露,确保企业网络的安全稳定。然而,在实施内外网隔离的同时,如何实现文…

读书笔记-Java并发编程的艺术-第1章 并发编程的挑战

文章目录 1.1 上下文切换1.1.1 多线程一定快吗1.1.2 如何减少上下文切换 1.2 死锁1.3 资源限制的挑战 1.1 上下文切换 即时是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给多个线程的时间,因为时间…

H3CNE-6-ICMP数据包分析

ICMP:Internet Control Message Protocol ICMP用来传递差错、控制、查询等信息 Wireshark抓包 Wireshark下载国内镜像 ICMP数据包格式 Type:表示ICMP消息类型 Code:表示同一消息类型中的不同信息 ICMP消息类型和编码类型 ICMP应用 &…

idea中显示git的Local Changes

1. 第一打开idea中的Settings文件 2. 找到Version Contro中的commint 3. 取消勾选应用即可 4. 本地提交就会显示出来