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

一. 结论

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法设计与分析】基于Go语言实现动态规划法解决TSP问题

本文针对于最近正在学习的Go语言,以及算法课实验所需内容进行Coding,一举两得! 一、前言 由于这个实验不要求向之前的实验一样做到那种连线的可视化,故可以用图形界面不那么好实现的语言进行编写,考虑到Go语言的…

2、xss-labs之level2

1、打开页面 2、传入xss代码 payload&#xff1a;<script>alert(xss)</script>&#xff0c;发现返回<script>alert(xss)</script> 3、分析原因 打开f12&#xff0c;没什么发现 看后端源码&#xff0c;在这form表单通过get获取keyword的值赋给$str&am…

下雨!大水蚁引发的水文!看比赛咯,曼联VS曼城——早读(逆天打工人爬取热门微信文章解读)

唠唠嗑 水一水 引言Python 代码结尾 引言 今天星期六 大小周 一个等了很久的双休 昨天晚上真的是吓到我了 漫天的小飞虫 我一开始还以为是一两只 没想到那些小飞虫 从阳台不断飞进来 在山卡拉下面租房子 也是太恐怖了 来个特写 他们也就一个晚上的时间 成虫 天气合适 长翅…

使用docker commit创建新镜像

前言 我们知道&#xff0c;从docker-hub上拉取的镜像所创建的容器是最小版本的&#xff0c;比如ubuntu内部是没有vim编辑器的&#xff0c;我们需要自己手动安装&#xff0c;但是当我们安装后假如有人把我们的容器误删了&#xff0c;那么我们再次根据原始镜像创建的容器就没有了…

优先级队列(堆)的实现

1.什么是优先级队列 队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不合适&#xff0c;比如&#x…

Drone+Gitee自动执行构建、测试和发布工作流

拉取Drone:(至于版本&#xff0c;你可以下载最新的) sudo docker pull drone/drone:2 拉取runner&#xff1a; sudo docker pull drone/drone-runner-docker 在Gitee中添加第三方应用&#xff1a; 进入个人主页&#xff0c;点击设置&#xff1a; 往下翻&#xff0c;找到数…

2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针

import java.util.Scanner;public class Main {static Scanner scnew Scanner(System.in);public static void main(String[] args) {int nsc.nextInt();//数组长度int tsc.nextInt();//操作次数int arr[]new int[n];char arr1[] new char[t];int arr2[] new int[t];int vis…

输入一串字符,输入想要字符串前*的个数n,判断字符串前*的个数是大于n还是小于n,如果大于n则删除多余的*其它保持不变,如果小于n,则字符串也保持不变

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void fun(char* a, int n) {int i 0, j 0, m 0,b0,c0;char* p;p a;//第一步&#xff0c;判断字母前面有多少个*while (p[i] *){j;}printf("字母前*的个数%d\n",j);//求总的字符串长度while (a[m] !…

基于.net开发的博客系统

基于.net开发可以批量上传md文件生成文章的博客系统 .NET 个人博客 基于.net开发的博客系统 个人博客系统&#xff0c;采用.net core微服务技术搭建&#xff0c;采用传统的MVC模式&#xff0c;使用EF core来对mysql数据库(sqlite数据库)进行CRUD操作项目 为什么要自己开发博客…

csdn的insCode怎么用IDE和linux终端

1.进入insCode&#xff0c;选择工作台 找到我的项目&#xff0c;没有项目的话可以新建一个。 选择在IDE中编辑&#xff0c;界面如下&#xff1a; 右边有个终端&#xff0c;点击即可出现linux的xterm终端。

依赖的各种java库(工具类) :fastjson,lombok,jedis,druid,mybatis等

lombok 功能&#xff1a; Lombok 是一个实用的Java类库&#xff0c;可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。 导入包&#xff1a;使用Lombok首先要将其作为依赖添加到项目中&#xff0c;在pom.xml文件中手动添加 <dependency><groupId&g…

别对我动心短视频:成都鼎茂宏升文化传媒公司

别对我动心短视频&#xff1a;时代的爱情哲学与心理探索 在短视频的海洋里&#xff0c;"别对我动心"这样的标题&#xff0c;如同一颗石子投入平静的湖面&#xff0c;激起了层层涟漪。它不仅仅是对一段情感的拒绝&#xff0c;更是一种现代人情感态度的表达&#xff0…

AIGC-常见图像质量评估MSE、PSNR、SSIM、LPIPS、FID、CSFD,余弦相似度----理论+代码

持续更新和补充中…多多交流&#xff01; 参考: 图像评价指标PNSR和SSIM 函数 structural_similarity 图片相似度计算方法总结 MSE和PSNR MSE: M S E 1 m n ∑ i 0 m − 1 ∑ j 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 MSE\frac{1}{mn}\sum_{i0}^{m-1}\sum_{j0}^{n-1}[…

TECHNIUM INTERNATIONAL: 利用 AI 和 TECHNIUM 矩阵协议引领区块链创新

在充满活力的加密货币和区块链技术领域&#xff0c;Technium International 以领军者的姿态迅速崛起&#xff0c;跻身科技巨头的顶尖行列。Technium International 成立于 2018 年&#xff0c;总部设于塞席尔&#xff0c;透过人工智慧&#xff08;AI&#xff09;和区块链技术的…

代码随想录算法训练营第三十七天|435. 无重叠区间、763.划分字母区间、56. 合并区间、738.单调递增的数字、968.监控二叉树

435. 无重叠区间 文档讲解&#xff1a;代码随想录 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 本道题与上个题目相似&#xff0c;都是求重叠区间 统计重叠区间的个数&#xff0c;减去重叠区间的个数就是无重叠区间了 主要就是为了让区间尽可能的重叠。&a…

Python_文件操作_学习

目录 一、关于文件的打开和关闭 1. 文件的打开 2.文件的关闭 二、文件的读取 1. 文件的读_r 2. 使用readline 3.使用readlines 三、文件的写入 1. 文本的新建写入 2.文本的追加写入 四、文件的删除和重命名 1.文件的重命名 2.文件的删除 五、文件的定位读写 1.t…

【pyspark速成专家】5_Spark之RDD编程3

目录 ​编辑 六&#xff0c;共享变量 七&#xff0c;分区操作 六&#xff0c;共享变量 当spark集群在许多节点上运行一个函数时&#xff0c;默认情况下会把这个函数涉及到的对象在每个节点生成一个副本。 但是&#xff0c;有时候需要在不同节点或者节点和Driver之间共享变…

电商公司需不需要建数字档案室呢

建立数字档案室对于电商公司来说是非常有必要的。以下是一些原因&#xff1a; 1. 空间节约&#xff1a;数字档案室可以将纸质文件转化为电子文件&#xff0c;节省了大量存储空间。这对于电商公司来说尤为重要&#xff0c;因为他们通常会有大量的订单、客户信息和供应商合同等文…

OpenHarmony系统使用gdb调试init

前言 OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;适配新的开发板时&#xff0c;启动流程init大概率会出现问题&#xff0c;其为内核直接拉起的第一个用户态进程&#xff0c;问题定位手段只能依赖代码走读和增加调试打印&#xff0c;初始化过程中系统崩溃…

封装了一个iOS中间放大的collectionView layout

效果图如下所示 原理&#xff1a;就是首先确定一个放大和缩小系数和原大小对应的基准位置&#xff0c;然后根据距离每个布局属性到视图中心的距离和基准点到中心的距离的差距/基准点到中心的距离&#xff0c; 计算出每个布局属性的缩放系数 下面是代码 // // LBHorizontalCe…