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

git 分支管理规范

分支命名

master 分支

        master 为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。master 分支一般由 release 以及 hotfix 分支合并,任何时间都不能直接修改代码。

develop 分支

        develop 为开发环境分支,始终保持最新完成以及bug修复后的代码,用于前后端联调。一般开发的新功能时,feature分支都是基于develop分支创建的。

feature 分支

        开发新功能时,以develop为基础创建feature分支。

        分支命名时以 feature/开头,后面可以加上开发的功能模块, 命名示例:feature/user_modulefeature/cart_module`

        主线开发分支:每个迭代只有一个主线开发分支,大部分功能在这个分支上开发

        命名规范: feature-${迭代发版日期}-${版本号},例如 feature-20220710-1.3.0

        支线开发分支:用于主线开发分支并行的支线功能开发,由于此类功能开发周期长,与主线功能相对独立,为避免开发过程对主线分支造成影响,单独拉出支线分支

        命名规范: 以主线开分支命称为前缀即可,例如 feature-20220710-1.3.0-springboot-upgrade,其中前缀feature-20220710-1.3.0 对应的主线开发分支名称

我们现在版本号:我们用产品Prd 定义的为准

test分支

        test为测试环境分支,外部用户无法访问,专门给测试人员使用,版本相对稳定。

release分支

        release 为预上线分支(预发布分支),UAT测试阶段使用。一般由 test 或 hotfix 分支合并,不建议直接在 release 分支上直接修改代码。

Uat 分支(同release)

        Uat 分支为交付验收分支,其实和release的作用一样

hotfix 分支

        线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支。修复完成后,需要合并到 master 分支和 develop 分支(test/uat cherry pick 合并 同时保证问题再其他主线分支上修复)。

        分支命名以hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。

分支与环境对应关系

在系统开发过程中常用的环境:

  • DEV 环境(Development environment):用于开发者调试使用

  • FAT环境(Feature Acceptance Test environment):功能验收测试环境,用于测试环境下的软件测试者测试使用

  • UAT环境 (User Acceptance Test environment):用户验收测试环境,用于生产环境下的软件测试者测试使用

  • PRO 环境(Production environment):生产环境

对应关系:

分支功能环境可访问合并人员
master主分支,稳定版本PRO运维人员管理
develop开发分支,最新版本DEV研发人员
feature开发分支,实现新特性研发人员
test测试分支,功能测试FAT测试人员管理
release(cat)预上线分支,发布新版本UAT测试人员、运维人员管理
hotfix紧急修复分支,修复线上bug运维人员管理

分支合并流程规范

        业界常见的两大主分支(master、develop)、三个辅助分支(feature、release、hotfix)的生命周期:

        以上生命周期仅作参考,不同开发团队可能有不同的规范,可自行灵活定义。

例如我们团队在开发时,至少需要保证以下流程:

  • develop 分支和 hotfix 分支,必须从 master 分支检出

  • 由 develop 分支合并到 test 分支

  • 功能测试无误后,由 test 分支合并到uat 分支

  • UAT测试通过后,从master 拉 release 分支将uat 和 新拉的 release中 , 线上验证没问题再 合并到 master分支

  • 对于工作量小的功能开发(工时小于1天),可以直接在devolop 分支进行开发,否则由 develop 分支检出 feature 分支进行开发,开发完后合并到develop 分支

具体操作流程:

        产品根据需求的优先级提前做好规划,确定每个迭代需要完成的需求,并规划好迭代的版本和评估大致的上线日期,基于产品规划的迭代,研发即可介入需求实现的设计和研发,在研发的过程中,Git需遵循如下流程

  • 研发组长基于develop分支创建feature类的分支,并将该分支推送到远程,分支名: feature-版本号;示例: feature-3.7.0

  • 研发同事将feature-3.7.0拉取到本地,然后在本地feature-3.7.0开发。

  • 研发完成个人任务,并自测通过后,即可将【本地】feature-3.7.0的分支推送到【远程】feature-3.7.0 ,并将feature分支合并到develop分支,把develop部署到开发联调环境中进行联调

  • 联调通过后,研发人员发起测试申请,转入测试阶段。测试人员把feature-3.7.0合并到test分支,然后test分支部署到测试环境进行测试

  • 测试过程中发现的bug,研发人员仍在feature-3.7.0上修复,修复完再通知测试人员(每次可多修复一些,减少部署测试环境的次数),测试人员再通过合并到test分支的方式部署到测试环境,如此反复

  • 测试结束后,测试人员将test分支合并到uat分支,uat分支部署到UAT环境进行产品验收 (这个可以按照具体要上uat的内容 按需发布)

  • 产品验收通过后,研发组长从master分支拉出相同版本号的release分支,示例: release-3.7.0,然后把UAT分支合并到release-3.7.0,由运维同事把release-3.7.0发到正式环境,开始线上验证

  • 线上验证通过后,研发组长将release-3.7.0合并到master,打tag,并删除相应的主线feature分支

  • 如果线上验证不通过,则运维直接把master分支部署到正式环境来实现回滚,相应的release-3.7.0分支删除,其它分支不要删除

分支版本号:

prd tapt. 蓝湖 版本号 保持一致

Git Commit Message规范

Git commit message规范指提交代码时编写的规范注释,编写良好的Commit messages可以达到3个重要的目的:

  • 加快代码review的流程

  • 帮助我们编写良好的版本发布日志

  • 让之后的维护者了解代码里出现特定变化和feature被添加的原因

Angular Git Commit Guidelines

业界应用的比较广泛的是Angular Git Commit Guidelines:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
  • type:提交类型

  • scope:可选项,本次 commit 波及的范围

  • subject:简明扼要的阐述下本次 commit 的主旨,在Angular Git Commit Guidelines中强调了三点。使用祈使句,首字母不要大写,结尾无需添加标点

  • body: 同样使用祈使句,在主体内容中我们需要把本次 commit 详细的描述一下,比如此次变更的动机

  • footer: 描述下与之关联的 issue 或 break change

简易版

项目中实际可以采用简易版规范:

  <type>(<scope>):<subject>

type规范

Angular Git Commit Guidelines中推荐的type类型如下:

  • feat: 新增功能

  • fix: 修复bug

  • docs: 仅文档更改

  • style: 不影响代码含义的更改(空白、格式设置、缺失 分号等)

  • refactor: 既不修复bug也不添加特性的代码更改

  • perf: 改进性能的代码更改

  • test: 添加缺少的测试或更正现有测试

  • chore: 对构建过程或辅助工具和库(如文档)的更改

除此之外,还有一些常用的类型:

  • delete:删除功能或文件

  • modify:修改功能

  • build:改变构建流程,新增依赖库、工具等(例如webpack、gulp、npm修改)

  • test:测试用例的新增、修改

  • ci:自动化流程配置修改

  • revert:回滚到上一个版本

单次提交注意事项

  • 提交问题必须为同一类别

  • 提交问题不要超过3个

  • 提交的commit发现不符合规范,git commit --amend -m "新的提交信息"git reset --hard HEAD 重新提交一次

配置.gitignore文件

.gitignore是一份用于忽略不必提交的文件的列表,项目中可以根据实际需求统一.gitignore文件,减少不必要的文件提交和冲突,净化代码库环境。

通用文件示例:

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
​
## STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
​
## IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
​
## NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
​
## VS Code ###
.vscode/
​
# Log file
*.log
/logs*
​
# BlueJ files
*.ctxt
​
# Mobile Tools for Java (J2ME)
.mtj.tmp/
​
# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar
*.cmd

其他

此外,还有一些其他建议:

  • master 分支的每一次更新,都建议打 tag 添加标签,通常为对应版本号,便于管理

  • feature分支、hotfix分支在合并后可以删除,避免分支过多管理混乱

  • 每次 pull 代码前,提交本地代码到本地库中,否则可能回出现合并代码出错,导致代码丢失

  • 每次提交说明清楚,“小步”前进

如何解决合并冲突

        feature(或hotix)分支合并到develop(或test、uat)冲突:

1、从develop分支checkout一个临时分支tmp_develop_XXX(或tmp_test_XXX),

2、然后把feature合并到tmp_develop_XXX(或tmp_test_XXX),合并过程的代码冲突在tmp__develop_XXX(或tmp_test_XXX)上解决(注意,不是在feature上,也不是在develop(或test)上)

3、解决完冲突后,把tmp_develop_XXX(或tmp_test_XXX)合并到develop(或test)

4、删除tmp_develop_XXX(或tmp_test_XXX)

关于maven仓库的管理

        1、目前maven仓库deploy操作暂时在develop/test/uat 分支进行,大家不要在其它分支上进行deploy操作,相关的操作规范正在完善

        2、将来计划,计划再弄一个开发专有maven私服,以后会有两套maven私服,以后的规范是以我们有两套私服为前提

常见问题

1、release分支发布到【正式环境】,在【正式环境】验证发现bug时,在哪个分支修复

        直接在release分支修复。修复完再发【正式环境】,再【线上验证】

2、线上验收通过后,支线开发分支是否可以删除

        如果支线开发分支已经合并到主线开发分支,则可以放心删除 ​ 如果支线开发分支的代码没有合并的到主线开发分支,则说明此次线上验证并没有此分支的代码,需要找相应的开发人员问清楚后处理

3、开发人员可以在哪些分支上【提交】代码

  feature分支release分支,只有release分支在线上验证发现bug时,才能在release分支提交代码hotfix分支其它一律禁止直接提交代码,

4、开发人员可以向哪些分支【合并】代码

  develop分支,主线featrue分支,

5、任何情况下,绝对禁止develop合并到其它任何分支(当然,有的工程仍没有完成规范改造,改造过程 中暂不用考虑此条)

相关文章:

git 分支管理规范

分支命名 master 分支 master 为主分支&#xff0c;也是用于部署生产环境的分支&#xff0c;需要确保master分支稳定性。master 分支一般由 release 以及 hotfix 分支合并&#xff0c;任何时间都不能直接修改代码。 develop 分支 develop 为开发环境分支&#xff0c;始终保持…...

Spring Cloud Gateway 详解:构建高效的API网关解决方案

Spring Cloud Gateway 详解&#xff1a;构建高效的API网关解决方案 Spring Cloud Gateway 是 Spring Cloud 生态系统中用于构建 API 网关的核心组件。它基于 Spring WebFlux 构建&#xff0c;旨在提供简单且有效的方式来路由和增强 API 请求。以下是 Spring Cloud Gateway 的详…...

基于Quartus Prime18.1的安装与FPGA的基础仿真教程

Quartus是一种美国科技公司Intel&#xff08;英特尔&#xff09;公司开发的FPGA&#xff08;现场可编辑门阵列&#xff09;设计编译软件&#xff0c;用作设计、仿真、综合和布局、支持多种编程语言&#xff0c;包括VHDL、Verilog等&#xff0c;并具有丰富的功能和工具库&#x…...

AJAX 和 XML:现代 Web 开发的关键技术

AJAX 和 XML:现代 Web 开发的关键技术 引言 在当今的 Web 开发领域,AJAX 和 XML 是两项至关重要的技术。AJAX(Asynchronous JavaScript and XML)允许网页在不重新加载整个页面的情况下,与服务器交换数据和更新部分网页内容。而 XML(eXtensible Markup Language)则是一…...

vue实现图片预览

在 Vue 中实现图片预览功能&#xff0c;通常涉及监听文件输入的变化&#xff0c;并在用户选择文件后&#xff0c;使用 FileReader API 来读取文件内容&#xff0c;然后显示这个内容作为图片的预览。以下是一个简单的 Vue 组件示例&#xff0c;它实现了图片预览功能&#xff1a;…...

C语言入门系列:流程控制

一&#xff0c;C代码执行顺序 默认情况下&#xff0c;C语言程序从main()函数开始执行&#xff0c;随后按源代码中语句出现的顺序逐一执行。 这意味着&#xff0c;如果不考虑任何控制结构&#xff0c;程序会自上而下&#xff0c;逐行执行每条语句&#xff0c;直到遇到函数调用…...

【深度学习】NLP,Transformer讲解,代码实战

文章目录 1. 前言2. Transformer结构训练过程1. 输入嵌入和位置编码2. 编码器层2.1 单头的注意力机制(便于理解)2.2 多头的注意力机制(Transformer真实使用的)2.3 残差连接和层归一化2.4 前馈神经网络&#xff08;FFN&#xff09;2.5 残差连接和层归一化2.6 总结 3. 解码器层 推…...

ES6 .entries用法

.entries() 返回数组的可迭代对象itarator,可以通过for of 来遍历数组或对象的值。但是它们的写法不一样。 数组用法 obj [apple,bananer,orange] for(let [i,v] of obj.entries()){console.log(i)console.log(v) } //输出 // 0 // apple // 1 // bananer // 2 //orange对象…...

【LeetCode 动态规划】买卖股票的最佳时机问题合集

文章目录 1. 买卖股票的最佳时机含冷冻期 1. 买卖股票的最佳时机含冷冻期 题目链接&#x1f517; &#x1f34e;题目思路&#xff1a; &#x1f34e;题目代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();ve…...

python学习:语法(2)

目录 对象的布尔值 分支结构 双分支结构 多分支结构 嵌套if的使用 条件表达式 Pass语句 range()函数的使用 流程控制语句 对象的布尔值 Python一切皆对象&#xff0c;所有对象都有一个布尔值&#xff0c;通过内置函数bool&#xff08;&#xff09;获取对象的布尔值 这些…...

经典电源电路基础(变压-整流-滤波-稳压)

1.电源电路的功能和组成 电子电路中的电源一般是低压直流电&#xff0c;先把220v交流电变换成低压直流电&#xff0c;再用整流电路变成脉动的直流电&#xff0c;最后用滤波电路滤除掉脉动直流中的交流成分后才能得到直流电。有的电子设备对电源的质量要求很高&#xff0c;所以…...

生成式人工智能备案办理指南,深度解析大模型备案全流程

早在2023年年初&#xff0c;国家互联网信息办公室、工业和信息化部、公安部针对深度合成服务制定的《互联网信息服务深度合成管理规定》&#xff08;“《深度合成管理规定》”&#xff09;顺利施行&#xff0c;其明确了深度合成服务相关方的义务与主体责任&#xff0c;强化了对…...

1527. 患某种疾病的患者

1527. 患某种疾病的患者 题目链接&#xff1a;1527. 患某种疾病的患者 代码如下&#xff1a; # Write your MySQL query statement below select patient_id,patient_name,conditions from Patients where conditions like "DIAB1%" or conditions like "% DI…...

【C/C++】【学生成绩管理系统】深度剖析

可接各类C/C管理系统课设 目录 实现功能 部分1&#xff1a;系统设置和主菜单 1. 引入头文件 2. 定义结构体 3. 函数声明 4. 主函数 部分2&#xff1a;添加学生信息 部分3&#xff1a;删除学生信息 部分4&#xff1a;修改学生信息 部分5&#xff1a;查询学生信息 部分…...

C++作业第四天

#include <iostream> using namespace std; class Per { private: string name; int age; int *high; double *weight; public: //构造函数 Per() { cout << "Per的无参构造" << endl; } Per(str…...

设计模式之工厂方法模式(Factory Method Pattern)

目录 1.1、前言1.2、工厂方法模式简介1.2.1、工厂方法模式的主要特点1.2.2、工厂方法模式的主要结构1.2.3、使用工厂方法模式的好处 1.3、SpringBoot中那些场景使用了工厂方法模式1.4、日常工作中那些业务场景可以使用工厂方法模式1.5、工厂方法模式实战&#xff08;以某商场一…...

API接口设计的18条规范

API接口设计的18条规范 签名 目的&#xff1a;防止数据被篡改 实现方法&#xff1a; 接口请求方将请求参数、时间戳和密钥拼接成一个字符串使用MD5等hash算法生成签名sign在请求参数或请求头中增加sign参数&#xff0c;传递给API接口API接口网关服务验证传递的sign值&#…...

adb简单使用命令

1. 查看当前连接的设备 adb devices 2. 文件路径 adb install apk 注意文件路径中不能有中文 3. adb shell ps Toplogcatlogcat可以结合greplogcat *:w 显示警告级别以上de 4. adb uninstall 软件名 1.软件名如何查看&#xff1f; 使用命令adb shell pm list packages会…...

构建 deno/fresh 的 docker 镜像

众所周知, 最近 docker 镜像的使用又出现了新的困难. 但是不怕, 窝们可以使用曲线救国的方法: 自己制作容器镜像 ! 下面以 deno/fresh 举栗, 部署一个简单的应用. 目录 1 创建 deno/fresh 项目2 构建 docker 镜像3 部署和测试4 总结与展望 1 创建 deno/fresh 项目 执行命令…...

数据库 | 数据库设计的步骤

1.需求分析 调查机构情况与熟悉业务活动&#xff0c;明确用户的需求&#xff0c;确定系统的边界&#xff0c;生成数据字典和用户需求规格说明书 2.概念结构设计 将从需求分析中得到的用户需求抽象为概念模型&#xff0c;设计E-R模型 3.逻辑结构设计 将E-R图转换为和DBMS相…...

改进YOLO系列 | CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子

Involution&#xff1a;超越卷积和自注意力的新型神经网络算子&#xff08;中文综述&#xff09; 简介 Involuton是CVPR 2021上提出的新型神经网络算子&#xff0c;旨在超越卷积和自注意力&#xff0c;提供更高效、更具表达力的特征提取能力。 Involution原理 Involution的…...

落地速度与效果之争,通用VS垂直,我的观点和预测。

标题&#xff1a;AI大模型战场&#xff1a;通用VS垂直&#xff0c;谁将领跑落地新纪元&#xff1f; 摘要&#xff1a;随着人工智能技术的飞速发展&#xff0c;大模型的应用场景日益广泛。在这场竞赛中&#xff0c;通用大模型和垂直大模型各有优势&#xff0c;落地速度和可能性也…...

【Android面试八股文】在Android中,出现ClassNotFound的有可能的原因是什么?

在Android环境下类未找到的可能原因 在Android环境下,类未找到的可能原因包括但不限于以下几点: 类路径问题:Android应用使用的类通常存储在APK文件中。如果类所在的APK文件没有被正确加载,或者应用的类路径配置有误,就会导致类未找到的错误。 多DEX文件加载问题:在一些…...

模板引擎与 XSS 防御

在 View 层&#xff0c;可以解决 XSS 问题。在本书的“跨站脚本攻击”一章中&#xff0c;阐述了“输入检查” 与“输出编码”这两种方法在 XSS 防御效果上的差异。XSS 攻击是在用户的浏览器上执行的&#xff0c; 其形成过程则是在服务器端页面渲染时&#xff0c;注入了恶意的 H…...

vue3轮播图怎么做

先看效果 实现代码 <n-carouseleffect"card"dot-type"line"draggable:autoplay"!isHovered":current-index"currentIndex"prev-slide-style"transform: translateX(-150%) translateZ(-450px);opacity:1"next-slide-st…...

ubuntu中安装docker并换源

使用 Ubuntu 的仓库安装 Docker sudo apt update现在&#xff0c;你可以使用以下命令在 Ubuntu 中安装 Docker 以及 Docker Compose&#xff1a; sudo apt install docker.io docker-composeDocker 包被命名为 docker.io&#xff0c;因为在 Docker 出现之前就已经存在一个名为…...

HTML静态网页成品作业(HTML+CSS)—— 环保主题介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…...

深入了解RSA加密算法

目录 前言 一、什么是RSA&#xff1f; 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代&#xff0c;信息的安全性成为了人们关注…...

github基础使用

前言 将用到的github指令记录下来&#xff0c;持续更新&#xff0c;方便随时查找学习。 一、github用到的指令 1、我们从github克隆下来的代码版本一般都是master主分支&#xff0c;我们要建立自己的分支进行修改&#xff1a; //git branch //查看目前的分支/* * master /…...

Docker使用心得

Docker使用心得 最近使用Docker比较频繁&#xff0c;特此想记录一下&#xff0c;方便后续查找。 Docker常用命令Docker如何配置使用GPU环境&#xff1f;如何使用Dockerfile构建镜像&#xff1f;如何使用docker compose 实例化容器&#xff1f; Docker如何配置使用GPU环境 参…...

表白时刻网站/济南百度公司

#css基本语法及页面引用 ##css基本语法 css的定义方法是&#xff1a; 选择器 { 属性:值; 属性:值; 属性:值;} 选择器是将样式和页面元素关联起来的名称&#xff0c;属性是希望设置的样式属性每个属性有一个或多个值。代码示例&#xff1a; div{ width:100px; height:100px; …...

团购网站怎么做推广/百度收录官网

报错:叫我们删除log4j-over-slf4j.jar, 选中项目 然后搜索对应的包,然后排除即可,我这边已经排除了,就ok了 ctrlF搜索哦! 版本问题,使用插件解决吧: https://yidajava.blog.csdn.net/article/details/103668676...

大学生服装网站建设策划书/青岛网站制作设计

IDEA设置不需要重启Tomcat而更新代码&#xff08;热部署&#xff09;...

ps网站设计素材/黄页网络的推广网站有哪些软件

如何在Android中使用Alarm Manager启动服务&#xff1f;在我的应用程序中&#xff0c;我正在尝试使用警报管理器启动服务。当我点击按钮时&#xff0c;服务应该在我给出的特定时间开始。我的警报管理器代码如下&#xff1a;public void onClick(View view) {if(view m_btnActi…...

上海闵行做网站的公司/河源市seo点击排名软件价格

正则表达式-理论基础篇 搬运自个人博客,原址正则表达式-理论基础篇什么是正则表达式?可以称作规则一个描述字符模式的对象&#xff0c;正则表达式中的字母和数字&#xff0c;都是按照字面含义进行匹配的。强大的字符串匹配工具如何建立一个正则表达式&#xff1f;使用RegExp()…...

做3D打印样品用什么外贸网站好/推广怎么推

VMware安装VMware tool是 遇到The path “” is not a valid path to the 3.10.0-693.el7.x86_64 kernel headers. The path “” is not a valid path to the 3.10.0-693.el7.x86_64 kernel headers.问题是找不到内核头文件&#xff0c;需要安装头文件&#xff0c;按照网上的方…...