Git 代码分支规范

目的

俗话说:没有规矩,不成方圆。遵循一个好的规章制度能让你的工作事半功倍。同时也可以展现出你做事的认真的态度以及你的专业性,不会显得杂乱无章,管理困难。Git分支规范也是一样。当遵循了某种约定的Git分支,在代码提交以及多开发、多分支协同工作的时候,必须遵循这个规范操作,否则不予以提交、合并代码、提测、上线等操作。

适用范围

适用Git管理开发的所有项目


分支约定

Git Flow有主分支和辅助分支两类分支,通常主分支也被称为长期分支。

  • 主分支用于组织与软件开发、部署相关的活动;

  • 辅助分支组织为了解决特定的问题而进行的各种活动。

主分支是所有开发活动的核心分支。所有的开发活动产生的输出物最终都会反映到主分支的代码中。

分支介绍

•    tag:

使用release发布生产成功后,三日之内把release分支合并到master上并打tag。

使用realase分支创建tag版本,使用tag进行线上部署

生产流水线自动打tag

•    master分支:

不接受commit,只接受来自realase分支的merge操作

分支必须开启分支保护,只有维护者可以操作

•    release分支:

可从test/master分支上拉取;

不接受commit,只接受来自对应test分支的合并操作;

普通开发人员不具有合并权限,需要管理员才能合并

release分支用于发布预生产环境部署;

上线成功后必须立即合并到master

release分支用于发布生产环境部署,上线完成后,禁止合并;

•    test分支

从master/develop分支拉取,用于测试环境部署

不接受commit提交,只接受来自对应develop的合并

•    develop分支:

从master/feature分支拉取,用于开发环境部署

不接受commit提交,只接受来自feature的合并

•    feature分支:

不限制从什么分支拉取,拉取代码时候版本号必须大于等于最新master的版本

可直接commit

一般不用于任何环境部署,特殊情况可以用于开发环境部署

禁止用于测试、预生产、灰度、生产部署

bug修复分支,也按feature分支规范和流程

•    hotfix分支

紧急bug修复分支,仅用于紧急的线上问题修复,普通bug修复还是使用feature分支规范

分支命名规则及对应环境

分支

命名规则

名称

环境

权限

master

master

主分支,保护分支,只接受merge 

-

保护

tag

 tag-{上线时间}-v{版本号} 

tag 如:tag-20220803-v1.2.0

-

只读

release

release-{时间}-{版本号}-{创建人} ;

 预上线分支;release-20220803-v1.2.0-liuyy 

预生产、生产

保护

test

test-{时间}-{功能描述}-{创建人} ;除了前缀,名称与develop一致

测试部署分支; test-20220803-superChargeV1-liuyy

测试

保护

develop

develop-{时间}-{功能描述}-{创建人}  ; 除了前缀,名称与feature一致

开发部署分支;develop-20220803-superChargeV1-liuyy

开发

常规

feature

 feature-{创建时间}-{功能描述}-{创建人} 

功能开发分支;feature-20220803-superChargeV1-liuyy

-

常规

hotfix

hotfix-{创建时间}-{bug描述}-{创建人}

紧急bug修复分支;hotfix-20220803-bugxxx-liuyy

不限

常规

分支规则正则:

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

^(test|feature|develop|hotfix)-(20\d{6})(-\w+){2}$|^(release|tag)-(20\d{6})-v\d+(\.\d+){2}(-\w+){0,1}$

分支使用示意图

总结

1、一个上线需求一个feature分支,正常情况feature、develop、test、release分支是一一对应的

2、如果有多个需求需要合并上线,那么需要从develop分支开始合并,即多个feature对一个develop分支,但develop、test、release也还是一一对应的

3、除了feature分支外,所有分支都不接受commit,只接受合并

4、普通bug修复使用feature分支,流程一样

5、紧急bug修复走hotfix分支流程

6、所有上线的代码必须走完完整的develop、test、release流程

代码提交规范

  • 所有commit必须有注释,内容必须简洁明了的描述本次commit涵盖了哪些内容。严禁注释内容过于简单或不能明确表达提交内容的!

  • 合理控制提交内容的颗粒度,一次commit含一个独立功能点。严禁一次提交涵盖多个功能项。

  • 提交注释字符数务必大于8, 尽量控制在60个字符之内。

建议参考规范:

示例

fix(首页模块):修复弹窗 JS Bug。

type(可选)表示动作类型,可分为:

  • fix:修复 xxx Bug

  • feat:新增 xxx 功能

  • test:调试 xxx 功能

  • style:变更 xxx 代码格式或注释

  • docs:变更 xxx 文档

  • refactor:重构 xxx 功能或方法

scope(可选) 表示影响范围,可分为:模块、类库、方法等。

subject(必须) 表示简短描述,大于8个字符,小于 60 个字,如果有编号的 Jira 号,建议在描述中加上。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QGIS开发五:使用UI文件

前面我们说了在创建项目时创建的是一个空项目,即不使用 Qt 提供的综合开发套件 Qt Creator,也不使用 Qt Visual Studio Tools 这类工具。 但是后面发现,如果我想要有更加满意的界面布局,还是要自己写一个UI文件,如果不…

R语言4_安装BayesSpace

环境Ubuntu22/20, R4.1 你可能会报错说你的R语言版本没有这个库,但其实不然。这是一个在Bioconductor上的库。 同时我也碰到了这个问题,ERROR: configuration failed for package systemfonts’等诸多类似问题,下面的方法可以一并解决。 第…

LeetCode150道面试经典题--找出字符串中第一个匹配项的下标(简单)

1.题目 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 2.示例 3.思路 回溯算法:首先将…

layui 集成 ztree异步加载

首先&#xff0c;layui环境搭建&#xff0c;ztree环境引入 ztree的js和css都要引入&#xff0c;我这里暂时用的是core包> 静态&#xff0c;一句话就够了 <!-- 左侧菜单树形组件 --><div class"layui-col-md3"><div class"layui-footer "…

RabbitMQ 发布确认机制

发布确认模式是避免消息由生产者到RabbitMQ消息丢失的一种手段 发布确认模式 原理说明实现方式开启confirm&#xff08;确认&#xff09;模式阻塞确认异步确认 总结 原理说明 生产者通过调用channel.confirmSelect方法将信道设置为confirm模式&#xff0c;之后RabbitMQ会返回Co…

Linux下 时间戳的转化

Linux下一般用date 记录当前时间&#xff0c;尤其是我们需要保存测试log的时候&#xff0c;或者设计一个跑多长时间的脚本都需要时间戳。下面看一下平时最常用的几种写法 1 date “%Y-%m-%d %H:%M” 显示具体时间 2 修改时间 date -s 3 date %s :当前时间的时间戳 显示具体时…

ruoyi-cloud微服务新建子模块

ruoyi-cloud微服务新建子模块 1、复制system模块 直接复制 modules下面已有的system模块&#xff0c;改名为 test 2、在modules下的 pom.xml文件中添加子模块 3、进入 test模块修改 pom.xml 把原有的system 修改成test 4、修改对应的包名、目录名和启动应用程序为test 5、修…

在vue中使用echarts

在Vue中使用ECharts可以按照以下步骤进行&#xff1a; 1. 安装ECharts&#xff1a; 在Vue项目的根目录下&#xff0c;执行以下命令安装ECharts依赖&#xff1a; npm install echarts --save2.引入echart import * as echarts from echarts引入echart有全部引入和按需引入&a…

unity修改单个3D物体的重力的大小该怎么处理呢?

在Unity中修改单个3D物体的重力大小可以通过以下步骤实现&#xff1a; 创建一个新的C#脚本来控制重力&#xff1a; 首先&#xff0c;创建一个新的C#脚本&#xff08;例如&#xff1a;GravityModifier.cs&#xff09;并将其附加到需要修改重力的3D物体上。在脚本中&#xff0c…

Vue3 第五节 一些组合式API和其他改变

1.provide和inject 2.响应式数据判断 3.Composition API的优势 4.新的组件 5.其他改变 一.provide和inject 作用&#xff1a;实现祖与后代组件间通信 套路&#xff1a;父组件有一个provide选项来提供数据&#xff0c;后代组件有一个inject选项来开始使用这些数据 &…

【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承

【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承 依赖范围 依赖传递 依赖排除 依赖原则 依赖继承 依赖范围 在Maven中&#xff0c;依赖范围&#xff08;Dependency Scope&#xff09;用于控制依赖项在编译、测试和运行时的可见性和可用性。通过指定适当的依赖…

uniapp-原生地图截屏返回base64-进行画板编辑功能

一、场景 vue写uniapp打包安卓包&#xff0c;实现原生地图截屏&#xff08;andirod同事做的&#xff09;-画板编辑功能 实现效果&#xff1a; 二、逻辑步骤简略 1. 由 原生地图nvue部分&#xff0c;回调返回 地图截屏生成的base64 数据&#xff0c; 2. 通过 uni插件市场 im…