当前位置: 首页 > news >正文

高效分支管理规范

一、目的

通过标准化的流程和最佳实践,确保代码组织清晰、版本控制高效、变更管理有序,从而提高软件开发的质量、效率和可维护性,支持团队协作和持续集成/持续部署流程,最终实现项目的长期成功和发展

二、分支命名规范

  • 简洁明了:使用英文小写字母和下划线,避免使用特殊字符。

  • 易于识别:通过命名能够快速识别分支的用途和所属项目。

  • 统一规范:确保所有团队成员遵循相同的命名规则。

分支名称分支命名功能介绍约束对应环境
主干分支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、新功能开发流程

  1. 新的迭代开始,所有开发人员从主干dev拉个人分支开发特性, 分支命名规范 feature-name(根据项目实际情况可以省略特分支,此分支就是个人远程仓库,防止直接合入开发分支,通过提交merge的方式,只有代码检视通过才能合入,提升代码库质量)--这里可以增加自动代码审查。

  2. 开发完成后,通过自测,本地代码质量扫描合入dev分支

  3. 将本次迭代转测所有代码部署到dev环境,完成集成测试,并通过代码质量检查

  4. 基于dev拉取要发布的分支,release/xxx(如果创建好则跳过),将这个分支部署到测试环境进行测试

  5. 验收测试通过后,基于release/xxx发布版本。

  6. 待版本发布稳定后,将release/xxx同步到master,同时在 Master 分支上打个 Tag 记住 release 版本号,然后可以删release/$version

3、修复线上Bug(hotfix分支)

  1. master 分支某个 tag 上创建一个 hotfix 分支(热修复分支),一般是最新的 tag 应该和当前生产环境对应

  2. 开发人员完成Bug 修复,提交 hotfix 分支到测试环境验收通过

  3. 基于hotfix分支发布版本

  4. 待版本发布稳定后,将 hotfix 分支合并到dev与master 分支,同时在 master 分支上打个 Tag 记住 hotfix 版本号

  5. 删除 hotfix 分支

4、测试Bug修复流程

  1. 基于release/xxx分支创建fix/xxx的修复分支;

  2. 在fix/xxx的修复分支在开发环境自测通过,通知测试部署到测试环境验证;

  3. 测试验证通过,研发将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分支;

六、分支的删除规范

  1. 修复分支:

– hotfix/xxx 合并到master与dev分支可以删除,fig/xxx合并到dev和release/xxx 可以删除。

  1. 发布分支:

– release/xxx合并到master后可以产出。

  1. 注意事项:

– 删除分支前,确保该分支的代码已经合并回了相应的主分支,并且不再需要保留。

七、其他注意事项

  • 定期进行分支清理,避免分支过多导致管理混乱。

  • 团队成员应定期培训和交流,确保对分支管理规范有深入理解和遵循。

  • 遵循敏捷开发原则,灵活调整分支管理策略以适应项目需求变化。

相关文章:

高效分支管理规范

一、目的 通过标准化的流程和最佳实践,确保代码组织清晰、版本控制高效、变更管理有序,从而提高软件开发的质量、效率和可维护性,支持团队协作和持续集成/持续部署流程,最终实现项目的长期成功和发展 二、分支命名规范 简洁明了…...

跟我学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外部实体注入实战

若天下不定&#xff0c;吾往&#xff1b;若世道不平&#xff0c;不回&#xff01; 1.XXE漏洞实战 首先写入一个合法的xml文档 <?xml version "1.0"?> <!DOCTYPE gfzq [<!ENTITY gfzq "gfzq"> ]> <name>&gfzq;</name&…...

vue2项目中在线预览csv文件

简介 希望在项目中&#xff0c;在线预览.csv文件&#xff0c;本以为插件很多&#xff0c;结果都只是支持excel&#xff08;.xls、.xlsx&#xff09;一到.csv就歇菜。。。 关于文件预览 vue-office&#xff1a;文档、 查看在线演示demo&#xff0c;支持docx、.xlsx、pdf、ppt…...

基于VUE实现语音通话:边录边转发送语言消息、 播放pcm 音频

文章目录 引言I 音频协议音频格式:音频协议:II 实现协议创建ws对象初始化边录边转发送语言消息 setupPCM按下通话按钮时开始讲话,松开后停止讲话播放pcm 音频III 第三库recorderplayer调试引言 需求:电台通讯网(电台远程遥控软件-超短波)该系统通过网络、超短波终端等无线…...

PMP--一、二、三模、冲刺--分类--变更--技巧--特点

文章目录 一模二模三模冲刺14.敏捷--不确定性、风险和生命周期选择14.敏捷--特点--敏捷范围灵活&#xff0c;敏捷拥抱变更14.敏捷--阶段关口--在不同的组织、行业或工作类型中&#xff0c;阶段关口可能被称为阶段审查、阶段门、关键决策点和阶段入口或阶段出口。组织可以通过这…...

CSS Grid 布局实战:从入门到精通

文章目录 前言一、CSS Grid 布局概述1.1 什么是 CSS Grid 布局&#xff1f;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远程仓库&#xff0c;gitee码云例&#xff0c;Github_哔哩哔哩_bilibili 1、登gitee码云/Github 登录 - Gitee.com https://github.com/ &#xff08;没账号的注册一下就行&#xff09; 点击如下图位置的创…...

Java爬虫(HttpURLConnection)详解

文章目录 Java爬虫&#xff08;HttpURLConnection&#xff09;详解一、引言二、准备工作1、环境配置2、理解HttpURLConnection 三、发送GET请求1、创建URL对象2、打开连接3、设置请求方法4、连接并读取响应5、处理返回的数据 四、发送POST请求1、设置输出2、发送请求体3、读取响…...

基于STM32的智能停车管理系统设计

引言 随着城市汽车保有量的增加&#xff0c;停车难问题日益严重&#xff0c;传统停车管理方式效率低下&#xff0c;无法满足现代化需求。为了解决这一问题&#xff0c;本项目基于STM32微控制器设计了一种智能停车管理系统。系统能够通过传感器实时监测停车位的使用情况&#x…...

【循环神经网络】

循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类用于处理序列数据的神经网络&#xff0c;擅长处理具有时间依赖或顺序结构的数据。RNN通过循环连接的结构&#xff0c;使得当前时刻的输出可以受之前时刻信息的影响&#xff0c;因此被广泛应用于自然语…...

优选算法 - 4 ( 链表 哈希表 字符串 9000 字详解 )

一&#xff1a;链表 1.1 链表常用技巧和操作总结 1.2 两数相加 题目链接&#xff1a;两数相加 /*** 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操作系统中&#xff0c;Process Environment Block (PEB&#xff0c;进程环境块) 是一个包含特定进程信息的数据结构。它可以被用于反调试中 如何获取PEB指针&#xff1f; 在Windows操作系统中&#xff0c;获取PEB指针的常见方法主要有以下几种。&#xff1a; 1. 使…...

STM32开发基础阶段复习

1.使用寄存器方式点亮LED灯的三个步骤是什么&#xff1f; 首先使能RCC_APB2ENR&#xff08;外设时钟使能寄存器&#xff09;对应的GPIO端口时钟,即给LED这个外设使能时钟。 配置对应GPIO端口&#xff0c;配置为通用推挽输出&#xff0c;输出速度可以选择最大。 将GPIO端口输…...

搜维尔科技:SenseGlove触觉反馈手套开箱+场景测试

搜维尔科技&#xff1a;SenseGlove触觉反馈手套开箱场景测试 SenseGlove触觉反馈手套开箱场景测试...

在k8s上部署Crunchy Postgres for Kubernetes

目录 一、前言二、安装Crunchy Postgres for Kubernetes三、部署一个简单的postgres集群四、增加pgbouncer五、数据备份六、备份恢复七、postgres配置参数七、数据导入 一、前言 Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的postgres集群…...

大模型(LLMs)进阶篇

大模型&#xff08;LLMs&#xff09;进阶篇 一、什么是生成式大模型&#xff1f; 生成式大模型&#xff08;一般简称大模型LLMs&#xff09;是指能用于创作新内容&#xff0c;例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型&#xff0c;主要有两点不…...

近几年新笔记本重装系统方法及一些注意事项

新笔记本怎么重装系统&#xff1f; 近几年的新笔记本默认开启了raid on模式或vmd选项&#xff0c;安装过程中会遇到问题&#xff0c;新笔记本电脑重装自带的系统建议采用u盘方式安装&#xff0c;默认新笔记本有bitlocker加密机制&#xff0c;如果采用一键重装系统或硬盘方式安装…...

小程序19-微信小程序的样式和组件介绍

在小程序中不能使用 HTML 标签&#xff0c;也就没有 DOM 和 BOM&#xff0c;CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写&#xff0c;WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构&#xff0c;小程序中标签称为组件…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...