大厂的 Git 代码管理规范是怎样的?

分支命名

master 分支

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

develop 分支

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

feature 分支

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

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

test 分支

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

release 分支

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

hotfix 分支

线上出现紧急问题时,需要及时修复,以 master 分支为基线,创建 hotfix 分支。修复完成后,需要合并到 master 分支和 develop 分支。

分支命名以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预上线分支,发布新版本UAT
hotfix紧急修复分支,修复线上bug

分支合并流程规范

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





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

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

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

•由 develop 分支合并到 test 分支。

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

•UAT 测试通过后,由 release 分支合并到 master 分支。

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

Git Commit Message 规范

Git Commit Message 规范指提交代码时编写的规范注释,编写良好的 Commit Message 可以达到 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.mdtarget/!.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 代码前,提交本地代码到本地库中,否则可能会出现合并代码出错,导致代码丢失。

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

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

相关文章

LabVIEW实现变风量VAV终端干预PID控制

LabVIEW实现变风量VAV终端干预PID控制 变风量&#xff08;VAV&#xff09;控制方法的研究一直是VAV空调研究的重点。单端PID控制在温差较大时&#xff0c;系统容易出现过冲。针对空调终端单端PID控制的不足&#xff0c;设计一种干预控制与PID控制耦合的控制方法。项目使用LabV…

Adobe:受益于人工智能,必被人工智能反噬

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Adobe(ADBE)受益于生成式人工智能的兴起&#xff0c;其一直能实现两位数的收入增长就证明了这一点。 &#xff08;2&#xff09;在生成式人工智能兴起时&#xff0c;该公司就快…

数据结构——顺序表(SeqList)

目录 1. 顺序表介绍 2. 顺序表工程 2.1 顺序表定义 2.1.1 静态顺序表 2.1.2 动态顺序表 2.2顺序表接口 2.2.1 顺序表初始化 2.2.2 顺序表打印 2.2.3 顺序表销毁 2.2.4 顺序表数据插入 2.2.4.1 容量检查 2.2.4.2 顺序表尾插 2.2.4.3 顺序表头插 2.2.4.4 顺序表随机…

selenium自动化测试入门 —— 设置等待时间

time.sleep(3) 固定等待3秒 driver.implicitly_wait(10) 隐性的等待&#xff0c;对应全局 WebDriverWait( driver, timeout).until(‘有返回值的__call__()方法或函数’) 显性的等待&#xff0c;对应到元素 一、time.sleep(seconds) 固定等待 import time time.sleep(3) #…

UG NX机械设计软件常见安装问题

UG软件版本这里咱们就不提了&#xff0c;大部分伙伴应该都是钩子激活软件&#xff0c;肯定会遇到或多或少的安装问题&#xff0c;今天这里给大家总结了下&#xff0c;需要的小伙伴自取。 有其他问题可以一起讨论&#xff0c;也希望看到的小伙伴多关注支持哦。 安装UGNX的必要…

XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

XSAN数据恢复环境&#xff1a; 昆腾存储&#xff0c;MAC OS操作系统&#xff0c;存放视频类数据&#xff08;MXF、MOV等格式文件&#xff09;。 XSAN故障&检测&#xff1a; 将存储空间从XSAN架构迁移到STORNEXT架构后&#xff0c;存储空间中数据全部丢失。 故障存储中一共…

【微服务】mysql + elasticsearch数据双写设计与实现

目录 一、前言 二、为什么使用mysqles双写 2.1 单用mysql的问题 2.2 为什么不直接使用es 2.2.1 非关系型表达 2.2.2 不支持事务 2.2.3 多字段将造成性能低下 三、mysqles双写方案设计要点 3.1 全新设计 VS 中途调整架构 3.2 全表映射 VS 关键字段存储 3.2.1 最大程度…

Python武器库开发-常用模块之copy模块(十五)

常用模块之copy模块(十五) 在Python编程中&#xff0c;我们经常遇到需要复制或拷贝数据的情况。为了避免不必要的问题和错误&#xff0c;Python提供了copy模块来处理复制操作。本文将介绍copy模块的用法&#xff0c;包括浅拷贝和深拷贝的概念以及如何在不同场景中使用。 我们…

根据Aurora发送时序,造Aurora 数据包,从而进行AXIS接口数据位宽转换仿真

首先Aurora采用AXIS接口 由于后续需要进行AXIS接口 不同时钟域的数据位宽转换&#xff08;64bit和256bit之间的转换&#xff09;&#xff0c;因此分两次走。 第一种方法&#xff1a;采用AXIS数据位宽转换IP AXIS跨时钟域IP 第二种方法&#xff1a;逻辑完成 下面记录逻辑…

C++17中std::any的使用

类sdk:any提供类型安全的容器来存储任何类型的单个值。通俗地说&#xff0c;std::any是一个容器&#xff0c;可以在其中存储任何值(或用户数据)&#xff0c;而无需担心类型安全。void*的功能有限&#xff0c;仅存储指针类型&#xff0c;被视为不安全模式。std::any可以被视为vo…

“如何对TXT文件的内容进行连续行删除?实现一键文件整理!

如果你有一个TXT文件&#xff0c;需要删除其中的连续行&#xff0c;这可能是为了整理文件、去除重复信息或清除不需要的文本。尽管手动删除每一行可能很耗时&#xff0c;但幸运的是&#xff0c;有一个简单而高效的方法可以帮助你实现这个目标。 首先&#xff0c;在首助编辑高手…

高防IP的原理

高防IP&#xff0c;把域名解析到高防IP上(web事务只要把域名指向高防IP 即可。非web事务&#xff0c;把事务IP换成高防IP即可)一起在高防IP上设置转发规矩;所有公网流量都会走高防IP&#xff0c;通过端口协议转发的方法将用户的拜访通过高防IP转发到源站IP&#xff0c;一起将歹…