「研发部」GitFlow规范-升级版(二)

前言

上一篇文章简单整理过一次产研团队的GitFlow《Git 分支管理及Code Review 流程 (一)》

GitFlow是一种流行的Git分支管理策略,它提供了一种结构化的方式来管理项目的开发和发布流程。以下是GitFlow规范的主要组成部分:

主要分支:

  • master:主分支,存储的是正式环境的代码,它是稳定并且可部署到生产环境的。此分支应该是只读的,不允许直接在上面进行开发。
  • develop:开发分支,所有新的功能开发都应该基于这个分支。它是master分支的副本,并且是集成测试的场所。

辅助分支:

  • feature:功能分支,用于开发新功能。每个功能都应该有一个自己的分支,它的命名规则可以是feature/*,比如feature/new-login。当功能开发完成并通过测试后,它会合并到develop分支。
  • release:预发布分支,用于准备新的生产版本。它基于develop分支创建,并且用于修复在预发布阶段发现的问题。它的命名规则可以是release/*,比如release/1.2.0。当预发布阶段结束后,它会合并到master和develop分支。
  • hotfix:热修复分支,用于修复生产环境中的紧急问题。它基于master分支创建,并且当问题修复后,它会合并到master和develop分支。它的命名规则可以是hotfix/*,比如hotfix/1.2.1。

工作流程:

  • 当开始一个新功能时,从develop分支创建一个新的feature分支。
  • 在feature分支上开发新功能,并通过单元测试。
  • 完成后,将feature分支合并到develop分支,并删除feature分支。
  • 当准备发布新版本时,从develop分支创建一个新的release分支。
  • 在release分支上进行集成测试,并修复发现的问题。
  • 完成后,将release分支合并到master和develop分支,并删除release分支。
  • 如果在生产环境中发现紧急问题,从master分支创建一个新的hotfix分支。
  • 在hotfix分支上修复问题,并通过测试。
  • 完成后,将hotfix分支合并到master和develop分支,并删除hotfix分支。

以上就是GitFlow规范的基本内容。这种策略通过明确每个分支的角色和生命周期,以及定义清晰的工作流程,有助于保持代码的整洁和可维护性,提高团队之间的协作效率。

结合以上&目前的产研团队的GitFlow规范进行整理

1、产研开发规范

1.1 规范目标

  • 确保业务需求所有上生产的代码均为测试过的代码
  • 确保上线分支代码不被遗漏
  • 开发流程规范化,合理化,便于管理

1.2 产研开发流程

如上图:

  • 虚线上方为开发流程,虚线下方为每个流程需要的产出,色块的不同代表负责人为对应的角色
  • 角色分为组长、产品、主R、开发、测试,分别用不同的色块代表

重要阶段必要参与人:

  • 需求评审:产品、主R、开发、测试,负责角色为产品
  • 设计评审:产品、组长、主R、开发、测试,负责角色为开发
  • 用例评审:测试、产品、开发,负责角色为测试
  • 冒烟:开发、测试、产品(建议),负责角色为开发
  • 值班观察:负责角色为主R,可安排对应开发值班

2、Git分支规范

2.1 测试分支

  • 【强制】命名:test-上线日期,示例:test-20221206
  • 【强制】由项目主R建立,并建立分支保护,保护规则:必须经过Code Review
  • 【强制】不允许直接推送代码至测试分支,必须通过合并,如产生冲突,在开发分支解决后再合并

2.2 开发分支

  • 【强制】命名:feature-JIRA编号,示例:feature-JIRA001,feature-OFFICE001
  • 【强制】由开发从 master 分支拉取创建

2.3 热修复分支

  • 【强制】命名:hotfix-JIRA编号,示例:hotfix-JIRA001
  • 【强制】必须从 master 分支拉取

2.4 master分支

  • 【强制】分支保护模式,必须通过Code Review 合并

3、效能平台使用规范

3.1 环境发布分支规范

3.1.1 现状

  • prod环境:取master / tag版本分值进行上线
  • release环境:取master / tag版本分值进行发布
  • uat环境:只能发布 hotfix*、master 分支
  • test环境:只能发布 master、dev* 分支
  • dev环境:只能发布 master、dev* 分支

3.1.2 修改

  • prod环境:只能发布master/tag版本分支封板代码
  • release环境:取master / tag版本分值进行发布
  • uat环境:只能发布hotfix*、master分支 ,临时支持test*分支
  • test环境:只能发布master、test*、hotfix*分支
  • dev环境:不限制

3.2 环境使用规范

  • dev环境:开发,团队开发同学统一使用。
  • test环境:测试,开发完统一合并该环境供测试团队同学进行冒烟测试。
  • uat环境:开发,预其他团队一对一环境,涉及到外部门合作的统一在该环境进行回归测试。
  • release环境:上线前的预生产环境,数据使用的跟生产数据一致,用真实数据进行测试的环境。
  • prod环境:生产环境,正式外部访问

3.3 遇到问题

  • 测试分支稳定性相对不高,如单独弄测试分支流程会比较复杂
  • 需要多套环境支持,可合并测试分支后一起测试
  • git项目权限问题,需要运维给组长、可以针对主R开通相关权限

4、总结

对比其他版本管理工具,GitFlow有哪些优势?

GitFlow是一种Git分支管理策略,它与其他版本管理工具相比具有以下优势:

  • 清晰的分工合作:GitFlow将开发过程分解为不同的分支,每个分支都有明确的职责,比如特性开发、发布准备和维护。这有助于团队成员之间更好地协作,避免代码冲突和混乱。
  • 稳定的发布流程:通过特定的分支(如Release和Master分支),GitFlow确保了每次发布都是经过测试和稳定的版本。这有助于提供高质量的软件,并减少生产环境中的问题。
  • 灵活的热修复:当生产环境中出现紧急问题时,GitFlow的Hotfix分支允许开发团队快速修复问题并发布,而不影响其他功能的开发。这有助于减少停机时间和维护成本。
  • 高效的版本管理:GitFlow让版本追踪更加明确,团队可以清楚地知道每个版本的功能和改动。这有助于回滚到以前的版本或比较不同版本之间的差异。
  • 强大的分支模型:GitFlow的分支模型非常灵活,支持多个并行开发流程,包括新功能开发、发布准备和修复生产问题等。这有助于提高开发效率和响应速度。
  • 广泛的适用性:GitFlow不仅适用于有计划发布周期的项目,还可以用于持续交付的DevOps最佳实践。这使得GitFlow成为各种规模和类型项目的理想选择。

需要注意的是,虽然GitFlow具有许多优势,但它并不是唯一正确的版本管理策略。在选择版本管理工具和方法时,团队应根据项目的具体需求和团队的工作方式做出决策。

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

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

相关文章

[Tomcat] [从安装到关闭] MAC部署方式

安装Tomcat 官网下载:Apache Tomcat - Apache Tomcat 9 Software Downloads 配置Tomcat 1、输入cd空格,打开Tomca目录,把bin文件夹直接拖拉到终端 2、授权bin目录下的所有操作:终端输入[sudo chmod 755 *.sh],回车 …

Authorization Failed You can close this page and return to the IDE

一.问题描述 注册JetBrains成功,并且通过了学生认证,但在activate pycharm时,却显示Authorization Failed You can close this page and return to the IDE如上图 二.原因: 可能是因为之前使用了破解版pycharm 三.解决方法&am…

第17节-高质量简历写作求职通关-投递反馈

(点击即可收听) 投递跟进和感谢信 如果对一家公司特别心仪,但是投递简历后一直得不到回复怎么办? 面试之后觉得自己没有表现好怎么办? 面试完几天了,依然没有得到回应怎么办? 这个时候你需要写一…

Asp.Net Core Webapi 配置全局路由 及 示例代码 下载

在开发项目的过程中,我新创建了一个controller,发现vs会给我们直接在controller头添加前缀,比如[Route("api/[controller]")],即在访问接口的时候会变成http://localhost:8000/api/values,但是如果控制器有很多个&#…

C++类和对象——深拷贝与浅拷贝详解

目录 1.深拷贝和浅拷贝是什么 2.案例分析 完整代码 1.深拷贝和浅拷贝是什么 看不懂没关系,下面有案例分析 2.案例分析 浅拷贝可能会导致堆区的内存重复释放 一个名为person的类里面有年龄和指向身高的指针这两个成员。 当我们执行到person p2(p1&am…

仿写ls -li 获取某一个路径下的所有文件的文件属性(不用管文件创建者和属组,也不要隐藏文件)

1》stat&#xff1a; 查看一个文件的属性 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *pathname, struct stat *statbuf); 形参&#xff1a;pathname 文件名 statbuf&#xff1a;获取到的文件属性存放的…

四、vtk相机类vtkCamera的使用

在三维渲染场景中,相机好比观众的眼睛,人站立的位置影响事物的大小,视角的不同影响看到事物的范围,目光的朝向影响看到事物的正反。 vtkCamera负责把三维场景投影到二维平面,如屏幕、图像等。 下图为相机投影示意图: 相机位置:即相机所在的位置,用方法vtkCamera::Se…

C/C++ - 类的封装特性

目录 类的封装 语法格式 声明定义 分文件 访问权限 类作用域 对象模型 构造函数 默认构造函数 带参构造函数 拷贝构造函数 构造函数重载 委托构造函数 初始数据列表 构造默认参数 构造函数删除 析构函数 析构函数概念 析构函数特性 析构函数示例 析构调用…

QEMU源码全解析41 —— Machine(11)

接前一篇文章&#xff1a;QEMU源码全解析40 —— Machine&#xff08;10&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 时间过去了几…

Redis实现多种限流算法

一 常见限流算法 1 固定窗口限流 每一个时间段计数器&#xff0c;当计数器达到阈值后拒绝&#xff0c;每过完这个时间段&#xff0c;计数器重置0&#xff0c;重新计数。 优点&#xff1a;实现简单&#xff0c;性能高&#xff1b; 缺点&#xff1a;明显的临界问题&#xff0c…

2024.1.25 C++QT 作业

思维导图 练习题 1. 自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void sh…

【Go】Channel底层实现 ②

文章目录 channel底层实现channel发送、接收数据有缓冲 channelchannel 先写再读channel 先读再写(when the receiver comes first) 无缓冲channelchannel存在3种状态&#xff1a; channel底层实现 // channel 类型定义 type hchan struct {// channel 中的元素数量, lenqcoun…

图文解析交流慢充原理和握手协议以及OBC工作原理

1.接口定义 2.硬件连接原理 2.obc工作原理 OBC里面包括单片机1和单片机2&#xff0c;DSP。 有的厂家方案只有一个单片机&#xff0c;CC/CP部分直接用DSP实现。交流桩的ARM控制K1、K2&#xff0c;S1。单片机1控制K3。单片机2控制S2。DSP控制K4。BMS控制PDU里面的K5&#x…

算法分析(概论)

目录 第一章 概论 1.算法的概念 1.定义 2.算法设计要求 3.算法的特性 4.算法描述 5.数据结构与算法 6.算法设计的基本步骤 2.算法分析 1.计算机资源 2.算法分析 3.评判算法效率的方法 4.算法时间复杂度分析 5.渐进符号 1.大Ο符号 2.大Ω符号 3.大Θ符号 4.三…

Allure 内置特性

章节目录&#xff1a; 一、内置特性概述二、展示环境信息三、测试结果分类四、用例步骤说明五、添加附件六、添加用例描述七、设置动态的用例标题八、报告中添加链接九、组织测试结果9.1 使用与理解9.2 指定运行 十、划分用例级别十一、动态生成附加信息十二、清空历史报告记录…

Cesium反向遮罩指定区域挖空---Primitive、PolygonGeometry、PolylineGeometry实现

PolylineRegionalExcavationFun2() {import("./data/安徽省.json").then((res) => {console.log(`res`, res);let features = res.features;let positionArray = [];let borderLinePositionArray = [];// 获取区域的经纬度坐标if (features[0]?.geometry?.coord…

【大数据】Flink 中的状态管理

Flink 中的状态管理 1.算子状态2.键值分区状态3.状态后端4.有状态算子的扩缩容4.1 带有键值分区状态的算子4.2 带有算子列表状态的算子4.3 带有算子联合列表状态的算子4.4 带有算子广播状态的算子 在前面的博客中我们指出&#xff0c;大部分的流式应用都是有状态的。很多算子都…

【陈工笔记-Transformer】Transformer的基础认识

对Transformer生动形象的比喻 Transformer包括了Encoder和Decoder&#xff0c;在知乎上看到了对两个部分关系的一种理解&#xff0c;非常有趣。即&#xff0c;“一个人学习跳舞&#xff0c;Encoder是看别人是如何跳舞的&#xff0c;Decoder是将学习到的经验和记忆&#xff0c;…

被动信息搜集

被动信息搜集主要通过搜索引擎或者社交等方式对目标资产信息进行提取&#xff0c; 通常包括IP查询、Whois查询、子域名搜集等。进行被动信息搜集时不与目标产 生交互&#xff0c;可以在不接触到目标系统的情况下挖掘目标信息。主要方法包括&#xff1a;DNS 解析、子域名挖掘、…

Unity中创建Ultraleap 3Di交互项目

首先&#xff0c;创建新的场景 1、创建一个空物体&#xff0c;重命名为【XP Leap Provider Manager】&#xff0c;并在这个空物体上添加【XR Leap Provider Manager】 在物体XP Leap Provider Manager下&#xff0c;创建两个子物体Service Provider(XR)和Service Provider(…