一种多版本、多人并行开发GIT分支管理规范

news2024/11/17 21:46:53

首发公众号: 赵侠客

引言

作为开发者每天在写代码的同时也在写BUG,所以一方面需要开发新的需求,另一方面还要填自己以前挖的坑。目前主流程序员都在使用GIT来管理自己的代码,当GIT仓库有多人维护或者项目有多个版本同时迭代开发时,就需要有一套合理的GIT分支管理流程来维护自己的代码。一般企业级项目都是按版本来迭代的,每个版本之间可能并不是串行的,在业务快速发展阶段很可能会出现多版本并行开发的情况,以公司有三套环境(测试环境、预发布环境、生产环境)为例本文介绍一种简单的多版本、多人并行开发GIT分支管理规范,希望该GIT分支管理规范能对您的团队带来帮忙,同时因为每个公司开发人员水平和流程有差异如果觉得该规范有什么不合适地方也希望大家指出,可以一起探讨改进。

二、环境介绍

  • 测试环境(dev)

为了简单我们没有拆分开发环境和测试环境,严格来说开发环境(dev)是做为开发者自己来Debug的一套环境,测试环境(test)是开发者完成需求开发后交付给测试人员验证的一套环境,为了方便快捷我们可以将这两个环境合成一个环境,当然这也因为开发人员频繁发版给测试人员带来测试环境不稳定的问题,还可能对测试人员回归BUG产生影响,可能回归好的BUG由于开发人员修改了代码又复现了。 不过既然是多版本并行开发,主要是以效率为主,开发和测试之前配合是非常重要的,好的配合是可以避免这些问题。

  • 预发布环境(pre)

这套环境是模拟生产环境,在测试人员完成所有BUG回归后会将需要发版的代码部署到预发布环境,在这个环境需要将发版相关的配置、SQL脚本统一整理,为上生产做准备,这个环境基本上不会有因为代码层面产生的BUG,大都是由于配置、数据等问题引发的BUG。

  • 生产环境(prod)

这个环境就是正式环境,发版就是将预发布环境的代码同步到该环境,同时当前版本在上预发布时记录的相关配置及SQL也一并在发版时同步到此环境。

三、开发流程

我们理想的开发流程可能是这样的

  1. 1.0.0版本需求评审
  2. 1.0.0版本代码开发
  3. 1.0.0版本提测
  4. 1.0.0版本上预发
  5. 1.0.0版本发版
  6. 1.0.1版本需求评审

理想的串行开发模式

但是实现的开发流程并不是这样的,做需求的产品可能有好几个人,开发也会有好几个人,每个产品会根据自己的需求排一个独立的版本,然后按排对应的开发人员来完成该版本的开发。我们以同时开发1.0.0、1.0.1、1.0.2三个版本为例:

实际多版本开发流程

这三个版本可能是由三个产品经理来做的需求,每个需求由三个开发人员来完成,然后可能是不同时刻上测试环境,最后统一发版。当然也有可能有一个版本开发周期比较长,无法一起发版,也有可能在开发过程中间线上出线BUG了要单独修复,可能和当前版本一起发版,也可能因为BUG比较严重要立马修复,紧急上线。这些情况在实际开发过程中都是经常遇见的。所以针对这些情况必须有一套清晰的GIT分支管理规范,不然代码可能一团糟,也可能把没有测试过的代码发生产,造成不可预知的结果。

四、GIT分支管理

这套多版本并行开发的GIT分支管理规范主要分为5个:

  • master,和生产环境正在跑的代码保持一致
  • release,和预发布环境正在跑的代码保持一致
  • dev,和测试环境跑的代码保持一致
  • feature/dev_x.x.x,为x.x.x版本需求正在开发的代码,开发前从master拉取
  • hotfix/bug_x,为线上x(Bug号) Bug修复的代码,修复前从master拉取

多版本并行开发GIT规范

上图为同时开发1.0.1和1.0.2版本及修复线上BUG_1的GIT分支管理流程

  • feature/dev_1.0.1,当完成1.0.1需求评审后,相关开发人员从Master拉取此分支进行开发
  • feature/dev_1.0.2,当完成1.0.2需求评审后,相关开发人员从Master拉取此分支进行开发
  • dev,在没有前置需求开发前从Master拉取
  • 1.0.1提测,将feature/dev_1.0.1分支合并到dev,部署dev最新代码到测试环境
  • 1.0.2提测,将feature/dev_1.0.2分支合并到dev,部署dev最新代码到测试环境,这步可能会产生代码冲突,这时谁开发的慢谁就要来解决冲突了🐶
  • hotfix/bug_10000,可能线上出现了一个BUG,需要从Master拉取代码修复,修复完成合并dev,测试环境验证
  • release,项管可能根据实际情况按排每个版本的发版窗口,1.0.1和1.0.2可能一起发,也可能单独发,还有可能和线上BUG一起发,我们根据实际情况,将需要发版的版本和BUG修复版本合并release,再次回归
  • 发版,在release将验证过的版本打tag,交付运维人员上生产
  • 完成发版后合并release到master,删除对应feature或者hotfix的开发分支

总结

本文介绍一种简单的多版本、多人并行开发Git分支管理规范,该方法为实际开发过程中总结的一套方法论,适用于项目快速迭代,需求更新频繁,发版窗口期比较短的业务场景,该方法主要有以下优点和缺点:

  • 优点:
  1. 相对比较简单,不需要借助中间件来管理分支,完全由开发者手动管理分支与开发需求版本之前的对应关系
  2. 支持三套环境、多个版本多人同时开、及线上BUG修复等复杂业务场景开发
  • 缺点:
  1. 上测试和上预发布都可能需要解决一次代码冲突,解决完需测试再次回归验证
  2. 发完版后release一定要合master,不然后面开发从master拉不是最新代码

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

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

相关文章

c++进阶学习--------多态

前言 需要声明的,本节课件中的代码及解释都是在vs2022下的x86程序中,涉及的指针都是4bytes。 如果要其他平台下,部分代码需要改动。 比如:如果是x64程序,则需要考虑指针是8bytes问题等等 1. 多态的概念 1.1 概念 …

.NET内网实战:白名单文件反序列化执行命令

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。 02基本介绍 本文内容部分节选自小报童…

【易社保-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

Java泛型方法的定义和使用、泛型类、泛型接口、泛型方法、通配符、泛型的上界与下界

文章目录 一、包装类1.1、基本数据类型和对应的包装类1.2、自动装箱和自动拆箱 二、基本介绍2.1、泛型引入背景2.1、什么是泛型2.2、为什么使用泛型 三、常见泛型字母含义四、泛型的使用4.1、泛型类4.2、泛型接口4.3、泛型方法 五、泛型的继承5.1、泛型不具备继承性5.2、何为数…

【Python】递归

专栏文章索引:Python 有问题可私聊:QQ:3375119339 文章内容改自:bilibili博主(又懂啦) 目录 一、递归函数 二、理解递归函数 一、递归函数 一个函数在其函数体内调用函数自身,这样的函数就称为递归函数。递归函数的…

每日一练 2024.9.29(2)

目录 解题思路与代码实现 题目分析 一、解题策略 关键步骤: 二、代码实现 三、代码解析 四、复杂度分析 五、运行示例 示例1: 示例2: 六、总结 解题思路与代码实现 题目分析 这道题目要求我们找到字符串列表 strs 中的相似字符组…

Arch - 架构安全性_验证(Verification)

文章目录 OverView导图1. 引言:数据验证的重要性概述2. 数据验证的基本概念3. 数据验证的层次前端验证后端验证 4. 数据验证的标准做法5. 自定义校验注解6. 校验结果的处理7. 性能考虑与副作用8. 小结 OverView 即使只限定在“软件架构设计”这个语境下&#xff0c…

物理学基础精解【40】

文章目录 矢量积矢量积(又称叉积、外积)的几何意义一、面积表示二、垂直性三、方向性四、应用实例五、数学表达 矢量积(叉积)的坐标表示法矢量积的坐标表示法的几何意义矢量积的性质矢量积的应用 矢量积(又称叉积、外积…

Linux——k8s组件

kubernetes 使用1.31.1 版本搭建集群核心组件,选择flannel 网络插件为整体集群的运行提供网络通信功能。 flannel 网络插件 kube-flannel kube-flannel-ds-9fgml 1/1 Running 1 (18m ago) 2d21h kube-flannel kube-flannel-ds-ghwbq …

<<迷雾>> 第 3 章 怎样才能让机器做加法 示例电路

全加器示意图 info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch03-01-full-adder.txt 原图 由3个全加器组成的3比特加法机 info::操作说明…

Linux——pod的调度

pod的调度 控制器: rc/rs 副本数量控制器 主要保证pod的数量符合管理员要求,并不会对pod进行额外的管理 以下三种控制器,本质上是服务控制器。具备以下特性: 副本数量的控制服务的滚动更新(更新pod)支持更新失…

基于springboot vue 投票系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

基于51单片机的2路电压采集proteus仿真

地址:https://pan.baidu.com/s/1oNOJJv78ecfWZkdlMyhNVQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

Linux:LCD驱动开发

目录 1.不同接口的LCD硬件操作原理 应用工程师眼中看到的LCD 1.1像素的颜色怎么表示 ​编辑 1.2怎么把颜色发给LCD 驱动工程师眼中看到的LCD 统一的LCD硬件模型 8080接口 TFTRGB接口 什么是MIPI Framebuffer驱动程序框架 怎么编写Framebuffer驱动框架 硬件LCD时序分析…

OpenAI全新多模态内容审核模型上线:基于 GPT-4o,可检测文本和图像

在数字时代,内容安全问题愈发受到重视。9月26日,OpenAI 正式推出了一款全新的多模态内容审核模型,名为 “omni-moderation-latest”。 该模型基于最新的 GPT-4o 技术,能够准确地识别检测有害文本图像。这一更新将为开发者提供强大…

Java | Leetcode Java题解之第445题两数相加II

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {Deque<Integer> stack1 new ArrayDeque<Integer>();Deque<Integer> stack2 new ArrayDeque<Integer>();while (l1 ! null) {stack1.…

AI Agent应用出路到底在哪?

1 Agent/Function Call 的定义 Overview of a LLM-powered autonomous agent system&#xff1a; Agent学会调用外部应用程序接口&#xff0c;以获取模型权重中缺失的额外信息&#xff08;预训练后通常难以更改&#xff09;&#xff0c;包括当前信息、代码执行能力、专有信息源…

《深度学习》OpenCV 角点检测、特征提取SIFT 原理及案例解析

目录 一、角点检测 1、什么是角点检测 2、检测流程 1&#xff09;输入图像 2&#xff09;图像预处理 3&#xff09;特征提取 4&#xff09;角点检测 5&#xff09;角点定位和标记 6&#xff09;角点筛选或后处理&#xff08;可选&#xff09; 7&#xff09;输出结果 3、邻域…

深度学习反向传播-过程举例

深度学习中&#xff0c;一般的参数更新方式都是梯度下降法&#xff0c;在使用梯度下降法时&#xff0c;涉及到梯度反向传播的过程&#xff0c;那么在反向传播过程中梯度到底是怎么传递的&#xff1f;结合自己最近的一点理解&#xff0c;下面举个例子简单说明&#xff01; 一、…

Qt开发技巧(九)去掉切换按钮,直接传样式文件,字体设置,QImage超强,巧用Qt的全局对象,信号槽断连,低量数据就用sqlite

继续讲一些Qt开发中的技巧操作&#xff1a; 1.去掉切换按钮 QTabWidget选项卡有个自动生成按钮切换选项卡的机制&#xff0c;有时候不想看到这个烦人的切换按钮&#xff0c;可以设置usesScrollButtons为假&#xff0c;其实QTabWidget的usesScrollButtons属性最终是应用到QTabWi…