高效分支管理规范
一、目的
通过标准化的流程和最佳实践,确保代码组织清晰、版本控制高效、变更管理有序,从而提高软件开发的质量、效率和可维护性,支持团队协作和持续集成/持续部署流程,最终实现项目的长期成功和发展
二、分支命名规范
-
简洁明了:使用英文小写字母和下划线,避免使用特殊字符。
-
易于识别:通过命名能够快速识别分支的用途和所属项目。
-
统一规范:确保所有团队成员遵循相同的命名规则。
| 分支名称 | 分支命名 | 功能介绍 | 约束 | 对应环境 |
| 主干分支 | master | 用于线上部署的稳定代码 | 只接受合并请求,每次发布打上Tag标签 | 生产环境 |
| 开发分支 | dev | 用于整合开发成员的代码的主干分支,从master分支创建 | 开发环境 | |
| 发布分支 | release/xxx | 用于发布新版本的分支,xxx为版本号,从develop分支创建,最终合并回maste分支 | 只接受合并请求 | 测试/UAT/生产环境 |
| 修复分支 | hotfix/xxx | 用于修复线上紧急bug的分支,xxx为版本号,从master分支创建并合并回master和develop分支。 | 测试环境 | |
| 修复分支 | fix/xxx | 用于修复转测的bug。从release/xxx创建,xxx为迭代编号+转测编号,如fix/1.6就是迭代1第6次转测,最终合并到release/xxx和dev分支 | 开发环境,测试环境 |
三、分支的使用和管理规范
1、源码仓库初始化
当接收到正常的业务需求时,项目经理/开发主管根据架构设计在gitlib上创建初始版项目,全英文小写,中间用_作为连接符:
-
后端代码以_service后缀
-
前端代码以_web后缀
-
移动端代码以_app后缀
创建分支,项目创建为master分支为主干分支,基于master创建dev分支,基于dev创建release分支(如果版本没确定可以放到转测时创建),设置三分支均为受保护分支,且master/release分支只有Maintainer角色可以合并。
注:Maintainer角色只能授予PM、测试组长、技术组长

2、新功能开发流程
-
新的迭代开始,所有开发人员从主干dev拉个人分支开发特性, 分支命名规范 feature-name(根据项目实际情况可以省略特分支,此分支就是个人远程仓库,防止直接合入开发分支,通过提交merge的方式,只有代码检视通过才能合入,提升代码库质量)--这里可以增加自动代码审查。
-
开发完成后,通过自测,本地代码质量扫描合入dev分支
-
将本次迭代转测所有代码部署到dev环境,完成集成测试,并通过代码质量检查
-
基于dev拉取要发布的分支,release/xxx(如果创建好则跳过),将这个分支部署到测试环境进行测试
-
验收测试通过后,基于release/xxx发布版本。
-
待版本发布稳定后,将release/xxx同步到master,同时在 Master 分支上打个 Tag 记住 release 版本号,然后可以删release/$version
3、修复线上Bug(hotfix分支)
-
从
master分支某个tag上创建一个hotfix分支(热修复分支),一般是最新的tag应该和当前生产环境对应 -
开发人员完成Bug 修复,提交
hotfix分支到测试环境验收通过 -
基于
hotfix分支发布版本 -
待版本发布稳定后,将
hotfix分支合并到dev与master分支,同时在master分支上打个 Tag 记住hotfix版本号 -
删除
hotfix分支
4、测试Bug修复流程
-
基于release/xxx分支创建fix/xxx的修复分支;
-
在fix/xxx的修复分支在开发环境自测通过,通知测试部署到测试环境验证;
-
测试验证通过,研发将fix/xxx分支代码同步到release/xxx与dev分支,同时删除fix/xxx分支;
四、提交内容规范
Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。但是,一般来说,commit message 应该清晰明了,说明本次提交的目的。提交规范设置为:" type:subject "
type
用于说明 commit 的类别,只允许使用下面7个标识。
-
feat:新功能(feature)
-
fix:修补bug
-
docs: 仅文档更改
-
style:格式(不影响代码运行的变动)
-
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
-
revert:回滚到上一个版本
-
test:增加测试
subject
subject 是 commit 类型的简短描述,建议不超过50个字。
五、提交分支规范
-
禁止向主分支直接提交代码,包括代码仓库在线编辑修改;
-
禁止提交测试性代码到任何主分支源码(src)目录,测试代码只能存在于测试(test)目录;
-
禁止任何工作分支跨主分支提交代码,工作分支从只能合并到与工作分支同源的主分支;
-
必须备注每一次提交,代码备注必须简要可读。准确的描述具备可检索性;
-
必须备注每一次合并请求,对合并请求包含的功能点简要描述。准确的描述具备可检索性。
-
必须每次提交之前本地完成代码质量扫描;
-
必须完成代码质量扫描才能合入release/xxx分支;
六、分支的删除规范
-
修复分支:
– hotfix/xxx 合并到master与dev分支可以删除,fig/xxx合并到dev和release/xxx 可以删除。
-
发布分支:
– release/xxx合并到master后可以产出。
-
注意事项:
– 删除分支前,确保该分支的代码已经合并回了相应的主分支,并且不再需要保留。
七、其他注意事项
-
定期进行分支清理,避免分支过多导致管理混乱。
-
团队成员应定期培训和交流,确保对分支管理规范有深入理解和遵循。
-
遵循敏捷开发原则,灵活调整分支管理策略以适应项目需求变化。
相关文章:
高效分支管理规范
一、目的 通过标准化的流程和最佳实践,确保代码组织清晰、版本控制高效、变更管理有序,从而提高软件开发的质量、效率和可维护性,支持团队协作和持续集成/持续部署流程,最终实现项目的长期成功和发展 二、分支命名规范 简洁明了…...
跟我学C++中级篇——RAII
一、什么是RAII Resource Acquisition Is Initialization,资源获取即初始化。C/C的开发者都知道,在这类语言的开发中,内存需要手动来控制。也就是说,释放和回收内存得开发者亲历亲为。从某种角度看,能够把控内存的细节…...
C语言第九周课——经典算法
目录 一、冒泡法排序 1.1原理 1.2代码实现(以升序排序为例) 1.3逻辑 1.4分析 二、二分法查找 2.1原理 2.2代码实现 2.3逻辑 2.4算法效率分析 三、素数判断 3.1原理 3.2代码实现 3.3逻辑 3.4分析 一、冒泡法排序 1.1原理 冒泡排序&…...
【Pikachu】XML外部实体注入实战
若天下不定,吾往;若世道不平,不回! 1.XXE漏洞实战 首先写入一个合法的xml文档 <?xml version "1.0"?> <!DOCTYPE gfzq [<!ENTITY gfzq "gfzq"> ]> <name>&gfzq;</name&…...
vue2项目中在线预览csv文件
简介 希望在项目中,在线预览.csv文件,本以为插件很多,结果都只是支持excel(.xls、.xlsx)一到.csv就歇菜。。。 关于文件预览 vue-office:文档、 查看在线演示demo,支持docx、.xlsx、pdf、ppt…...
基于VUE实现语音通话:边录边转发送语言消息、 播放pcm 音频
文章目录 引言I 音频协议音频格式:音频协议:II 实现协议创建ws对象初始化边录边转发送语言消息 setupPCM按下通话按钮时开始讲话,松开后停止讲话播放pcm 音频III 第三库recorderplayer调试引言 需求:电台通讯网(电台远程遥控软件-超短波)该系统通过网络、超短波终端等无线…...
PMP--一、二、三模、冲刺--分类--变更--技巧--特点
文章目录 一模二模三模冲刺14.敏捷--不确定性、风险和生命周期选择14.敏捷--特点--敏捷范围灵活,敏捷拥抱变更14.敏捷--阶段关口--在不同的组织、行业或工作类型中,阶段关口可能被称为阶段审查、阶段门、关键决策点和阶段入口或阶段出口。组织可以通过这…...
CSS Grid 布局实战:从入门到精通
文章目录 前言一、CSS Grid 布局概述1.1 什么是 CSS Grid 布局?1.2 主要特点 二、基本概念2.1 网格容器2.2 网格线2.3 网格轨道2.4 网格区域 三、常用属性3.1 定义网格结构3.2 控制网格项的位置3.3 控制网格间距3.4 自动填充和重复 四、实践案例4.1 项目结构4.2 HTM…...
git创建远程仓库,以gitee码云为例GitHub同理
git远程Remote服务端仓库构建的视频教程在这 Git建立服务端Remote远程仓库,gitee码云例,Github_哔哩哔哩_bilibili 1、登gitee码云/Github 登录 - Gitee.com https://github.com/ (没账号的注册一下就行) 点击如下图位置的创…...
Java爬虫(HttpURLConnection)详解
文章目录 Java爬虫(HttpURLConnection)详解一、引言二、准备工作1、环境配置2、理解HttpURLConnection 三、发送GET请求1、创建URL对象2、打开连接3、设置请求方法4、连接并读取响应5、处理返回的数据 四、发送POST请求1、设置输出2、发送请求体3、读取响…...
基于STM32的智能停车管理系统设计
引言 随着城市汽车保有量的增加,停车难问题日益严重,传统停车管理方式效率低下,无法满足现代化需求。为了解决这一问题,本项目基于STM32微控制器设计了一种智能停车管理系统。系统能够通过传感器实时监测停车位的使用情况&#x…...
【循环神经网络】
循环神经网络(Recurrent Neural Network, RNN)是一类用于处理序列数据的神经网络,擅长处理具有时间依赖或顺序结构的数据。RNN通过循环连接的结构,使得当前时刻的输出可以受之前时刻信息的影响,因此被广泛应用于自然语…...
优选算法 - 4 ( 链表 哈希表 字符串 9000 字详解 )
一:链表 1.1 链表常用技巧和操作总结 1.2 两数相加 题目链接:两数相加 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …...
CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试
在Windows操作系统中,Process Environment Block (PEB,进程环境块) 是一个包含特定进程信息的数据结构。它可以被用于反调试中 如何获取PEB指针? 在Windows操作系统中,获取PEB指针的常见方法主要有以下几种。: 1. 使…...
STM32开发基础阶段复习
1.使用寄存器方式点亮LED灯的三个步骤是什么? 首先使能RCC_APB2ENR(外设时钟使能寄存器)对应的GPIO端口时钟,即给LED这个外设使能时钟。 配置对应GPIO端口,配置为通用推挽输出,输出速度可以选择最大。 将GPIO端口输…...
搜维尔科技:SenseGlove触觉反馈手套开箱+场景测试
搜维尔科技:SenseGlove触觉反馈手套开箱场景测试 SenseGlove触觉反馈手套开箱场景测试...
在k8s上部署Crunchy Postgres for Kubernetes
目录 一、前言二、安装Crunchy Postgres for Kubernetes三、部署一个简单的postgres集群四、增加pgbouncer五、数据备份六、备份恢复七、postgres配置参数七、数据导入 一、前言 Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的postgres集群…...
大模型(LLMs)进阶篇
大模型(LLMs)进阶篇 一、什么是生成式大模型? 生成式大模型(一般简称大模型LLMs)是指能用于创作新内容,例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型,主要有两点不…...
近几年新笔记本重装系统方法及一些注意事项
新笔记本怎么重装系统? 近几年的新笔记本默认开启了raid on模式或vmd选项,安装过程中会遇到问题,新笔记本电脑重装自带的系统建议采用u盘方式安装,默认新笔记本有bitlocker加密机制,如果采用一键重装系统或硬盘方式安装…...
小程序19-微信小程序的样式和组件介绍
在小程序中不能使用 HTML 标签,也就没有 DOM 和 BOM,CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写,WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构,小程序中标签称为组件…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
