Git 分支设计规范
概述
这篇文章分享 Git 分支设计规范,目的是提供给研发人员做参考。
规范是死的,人是活的,希望自己定的规范,不要被打脸。
在说 Git 分支规范之前,先说下在系统开发过程中常用的环境。
| 简称 | 全称 |
|---|---|
| DEV | Development environment |
| FAT | Feature Acceptance Test environment |
| UAT | User Acceptance Test environment |
| PRO | Production environment |
- DEV 环境:用于开发者调试使用。
- FAT 环境:功能验收测试环境,用于测试环境下的软件测试者测试使用。
- UAT 环境:用户验收测试环境,用于生产环境下的软件测试者测试使用。
- PRO 环境:就是生产环境。
比如,项目域名为:http://www.abc.com,那么相关环境的域名可这样配置:
- DEV 环境:本地配置虚拟域名即可
- FAT 环境:
http://fat.abc.com - UAT 环境:
http://uat.abc.com - PRO 环境:
http://www.abc.com
接下来,针对不同的环境来设计分支。
分支
| 分支 | 名称 | 环境 | 可访问 |
|---|---|---|---|
| master | 主分支 | PRO | 是 |
| release | 预上线分支 | UAT | 是 |
| hotfix | 紧急修复分支 | DEV | 否 |
| develop | 测试分支 | FAT | 是 |
| feature | 需求开发分支 | DEV | 否 |
master 分支
master 为主分支,用于部署到正式环境(PRO),一般由 release 或 hotfix 分支合并,任何情况下不允许直接在 master 分支上修改代码。
release 分支
release 为预上线分支,用于部署到预上线环境(UAT),始终保持与 master 分支一致,一般由 develop 或 hotfix 分支合并,不建议直接在 release 分支上直接修改代码。
如果在 release 分支测试出问题,需要回归验证 develop 分支看否存在此问题。
hotfix 分支
hotfix 为紧急修复分支,命名规则为 hotfix- 开头。
当线上出现紧急问题需要马上修复时,需要基于 release 或 master 分支创建 hotfix 分支,修复完成后,再合并到 release 或 develop 分支,一旦修复上线,便将其删除。
develop 分支
develop 为测试分支,用于部署到测试环境(FAT),始终保持最新完成以及 bug 修复后的代码,可根据需求大小程度确定是由 feature 分支合并,还是直接在上面开发。
一定是满足测试的代码才能往上面合并或提交。
feature 分支
feature 为需求开发分支,命名规则为 feature- 开头,一旦该需求上线,便将其删除。
这么说可能有点不容易理解,接下来举几个开发场景。
开发场景
新需求加入
有一个订单管理的新需求需要开发,首先要创建一个 feature-order 分支,问题来了,该分支是基于哪个分支创建?
如果 存在 未测试完毕的需求,就基于 master 创建。
如果 不存在 未测试完毕的需求,就基于 develop 创建。
需求在
feature-order分支开发完毕,准备提测时,要先确定develop不存在未测试完毕的需求,这时研发人员才能将将代码合并到develop(测试环境)供测试人员测试。测试人员在
develop(测试环境) 测试通过后,研发人员再将代码发布到release(预上线环境)供测试人员测试。测试人员在
release(预上线环境)测试通过后,研发人员再将代码发布到master(正式环境)供测试人员测试。测试人员在
master(正式环境) 测试通过后,研发人员需要删除feature-order分支。
普通迭代
有一个订单管理的迭代需求,如果开发工时 < 1d,直接在 develop 开发,如果开发工时 > 1d,那就需要创建分支,在分支上开发。
开发后的提测上线流程 与 新需求加入的流程一致。
修复测试环境 Bug
在 develop 测试出现了Bug,如果修复工时 < 2h,直接在 develop 修复,如果修复工时 > 2h,需要在分支上修复。
修复后的提测上线流程 与 新需求加入的流程一致。
修改预上线环境 Bug
在 release 测试出现了Bug,首先要回归下 develop 分支是否同样存在这个问题。
如果存在,修复流程 与 修复测试环境 Bug流程一致。
如果不存在,这种可能性比较少,大部分是数据兼容问题,环境配置问题等。
修改正式环境 Bug
在 master 测试出现了Bug,首先要回归下 release 和 develop 分支是否同样存在这个问题。
如果存在,修复流程 与 修复测试环境 Bug流程一致。
如果不存在,这种可能性也比较少,大部分是数据兼容问题,环境配置问题等。
紧急修复正式环境 Bug
需求在测试环节未测试出 Bug,上线运行一段时候后出现了 Bug,需要紧急修复的。
我个人理解紧急修复的意思是没时间验证测试环境了,但还是建议验证下预上线环境。
如果
release分支存在未测试完毕的需求,就基于master创建hotfix-xxx分支,修复完毕后发布到master验证,验证完毕后,将master代码合并到release和develop分支,同时删掉hotfix-xxx分支。如果
release分支不存在未测试完毕的需求,但develop分支存在未测试完毕的需求,就基于release创建hotfix-xxx分支,修复完毕后发布到release验证,后面流程与上线流程一致,验证完毕后,将master代码合并到develop分支,同时删掉hotfix-xxx分支。如果
release和develop分支都不存在未测试完毕的需求, 就直接在develop分支上修复完毕后,发布到release验证,后面流程与上线流程一致。
并行提测
在一个项目中并行开发了两个需求,并行提测,但是上线日期不同。
我能想到的两种方案:
- 再部署一套可供测试人员测试的分支
- 使用
git cherry-pick“挑拣”提交
对于并行提测,你有好的方案吗?欢迎留言。
Commit 日志规范
提交信息一定要认真填写!
建议参考规范:<type>(scope):<subject>
比如:fix(首页模块):修复弹窗 JS Bug。
type 表示 动作类型,可分为:
- fix:修复 xxx Bug
- feat:新增 xxx 功能
- test:调试 xxx 功能
- style:变更 xxx 代码格式或注释
- docs:变更 xxx 文档
- refactor:重构 xxx 功能或方法
scope 表示 影响范围,可分为:模块、类库、方法等。
subject 表示 简短描述,最好不要超过 60 个字,如果有相关 Bug 的 Jira 号,建议在描述中加上。
小结
暂时就想到这么多,规范这东西不是一成不变的,供参考。
推荐阅读
Git 分支设计规范的更多相关文章
- Git 分支
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...
- Git分支管理
一.Git分支的使用 查看分支: git branch 创建分支: git branch branch1 切换到branch1 git checkout branch1 再用git branch查看, ...
- Git分支的前世今生
摘自Jack__CJ CSDN博客,写得很好,保存一下. 导读 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系 ...
- GIT分支管理模型
GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...
- Git详解之三 Git分支
相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...
- git初体验(三)git分支
分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...
- 如何在终端实时展现git分支
在微博上看到ghosTM55在终端可以实时展现出当前运行的分支,觉得很奇特,于是google了一把.这里面存在两个内容,第一个bash,第二个是git bash基础: 了解到linux的shell存在 ...
- php 通过exec 创建git分支失败
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...
- 开发与测试整体过程中的Git分支merge流程
开发与测试整体过程中的Git分支merge流程 Git分支merge之开发流程 首先在Gitlab上有个仓库存储着原始的项目代码,其中包含一个叫master的分支.然后可能按功能进行分配,由不同的开发 ...
随机推荐
- Flask 作者 Armin Ronacher:我不觉得有异步压力
英文 | I'm not feeling the async pressure[1] 原作 | Armin Ronacher,2020.01.01 译者 | 豌豆花下猫@Python猫 声明 :本翻译 ...
- EFCore Database-first深入研究
EFCore Database-first深入研究 使用Scaffold-DbContext从数据库生成实体 说明文档: 关于 Scaffold-DbContext 微软有官方说明文档 https:/ ...
- 通过例子学习C++(二)最小公倍数
本文是通过例子学习C++的第二篇,通过这个例子可以快速入门c++相关的语法. 题目要求:输入两个整数,求其最小公倍数. 解答方法一:两个数的最小公倍数,是这两个数中的大数,或者是这2个数的倍数中的最小 ...
- Linux普通用户如何获取root权限 sudo -i
从下图中可以知道,xiaolai这个用户连接到服务器后它没有权限,更新代码都更新不了 那么我们作为一个普通用户要获取管理员权限,怎么办呢? 输入 sudo -i 然后再输入普通用户的这个密码 获取成功 ...
- win + ubuntu 双系统 grub引导项修复
ubuntu liveCD模式,找到ubuntu的系统盘位置,挂载到系统上面,然后使用grub进行修复 ubuntu liveCD模式下是用boot-repair软件进行修复 grub急救模式 1. ...
- NPOI读取Excel的数据
首先是给项目安装NPOI.DLL :Install-Package NPOI -Version 2.4.1 HttpPostedFile upLoadPostFile = FileUpload1.Po ...
- vue拦截器
1.在路由添加 meta:{ requireAuth:true } 完整 { path: '/xx', name: 'xx', component: xx, meta:{ requireAuth:tr ...
- Tomcat9乱码解决
在tomcat的解压目录下找到conf,打开进入,logging.properties文件,在该文件中,修改 java.util.logging.ConsoleHandler.encoding = U ...
- java自定义注解学习(注解处理器)
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...
- pyautogui介绍
https://pyautogui.readthedocs.io/en/latest/introduction.html Introduction Purpose The purpose of PyA ...