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的分支.然后可能按功能进行分配,由不同的开发 ...
随机推荐
- oop(面向对象语言的三大特征):封装,继承,多态; (抽象),函数绑定
封装/隐藏 : 通过类的访问限定符实现的 private public 继承的意义之一:代码的复用 类的继承是指在一个现有类的基础上去构建一个新的类,构造出来的新类被称为派生类(子类),现有 ...
- 趣谈编程史第2期-这个世界缺少对C语言的敬畏,你不了解的C语言科普
这是我制作的编程语言科普系列视频的第二期,博客根据视频文案整理而成,提供给有需要的朋友阅读或使用. 视频地址:https://www.bilibili.com/video/av83627932/ ...
- OffSet和Utc
DateTime dtt = System.DateTime.Now ;//utcnow是格林威治的时间,与北京时间-8 strin(dtt); public static string strin( ...
- Docker 学习 1 入门
Docker 学习 1 入门 dockert 安装. Mac Ubuntu 查看docker 版本 docker version 拉取image. docker pull e.g docker pul ...
- python 黏包现象
一.黏包 1.tcp有黏包现象 表现两种情况 发送的数据过小且下面还有一个发送数据,这两个数据会一起发送 发送的数据过大,超过最大缓存空间,超出的部分在下一次发送的时候发送 原因: tcp是面向流的, ...
- 10.方法重写Override
方法重写:Override: 需要有继承关系,子类重写父类的方法! 方法名必须相同 参数列表必须相同 修饰符:范围可以扩大,但不能缩小:public>protected>defalut&g ...
- [DP][SA][可持久化线段树]黑红兔
源自 xyz32768 菜鸡的 FJ 省冬令营模拟赛题 原题 CF1063F Statement 给定一个长度为 \(n\) 的字符串 \(s\),仅包含小写英文字母 要从中从左往右选出若干段不相交的 ...
- CF6B President's Office 题解
看到大致思路一致的题解,决定发一篇运用STL不用dfs的题解 好久不发题解,心里不爽 思路: 1.输入的同时找到总统桌子的位置,用vector<pair <int,int> ...
- Qt Installer Framework翻译(7-3)
控制脚本 对于每个安装程序,您可以指定一个控制脚本,用来与安装程序的部分UI或功能进行交互.控制脚本可以在向导中添加和删除页面,更改现有页面,进行附加检查以及通过模拟用户单击来与UI交互.例如,这允许 ...
- 利用SuperMap iObjects.NET控件模拟小球平抛运动
1.部署SuperMap iObjects.NET控件 相关控件部署参考博客:SuperMap开发入门2--环境部署--我也是个傻瓜 2.Github项目地址 小球平抛运动项目源码 3 ...