前端 Git 使用约定
前端 Git 使用约定
背景
开发前端项目,有以下困惑:
- 使用哪个分支开发,哪个分支发布
- 修复线上bug的流程是什么,如何避免修复完了下次却又出现了
- cms分支有十多个,是否都有用
- 如何快速找到之前某次功能开发,或某次bug修复
为了减轻上述困扰,引入 gitflow 规范,并根据公司情况做适当调整。
gitflow
GitFlow 是一种基于 Git 的工作流程设计,它是由 Vincent Driessen 在2010年提出的。是一种分支管理模型。请看下图:
从右往左一共5个分支。
首先是 master
主分支,也就是线上代码。不应该直接修改,只需要合并其他分支。
其次是 develop
开发分支,从master拉取,也不应该直接修改。
现在有两个版本的需求需要开发,一个是下一个版本 1.0 的(Major feature for next release)的需求,另一个是下下个版本2.0(Feautre for future release)的需求,时间更长。所以直接从 develop 分支拉取两个 feature
功能分支。
其他人也在持续的推进 develop
分支的前进
现在 1.0 的需求开发完成,于是将 feature 分支合并到 develop 中,然后从 develop 中拉取一个 release 分支,用于发布前的测试,这个 release 分支就不在开发新功能,只做bug修复(Only bugfixes),同时修复的bug也需要同步到 develop 分支,最后测试通过,则将 release 分支合并到 master 分支,同时将 release 分支合并到 develop。
线上有了问题,需要紧急处理,于是从 master 拉取 hotfixes
分支,修复完成后将 hotfixes 合并到 master 分支和 develop 分支,避免后续 develop 还有这个问题。
其中 master 分支和 develop 分支是一直存在的,其他分支都是临时的。master 分支用于存放稳定的生产版本代码,而 develop 分支则用于集成各个功能分支最新的开发成果。
分支和环境对应关系:
feature | develop | release | hotfix | master |
---|---|---|---|---|
开发环境 | 测试环境 | 预发布环境 | 线上 | 线上 |
分支流程:
feature -> develop -> release -> master
小建议
- 保持 develop 分支和 feature 分支同步:如果 develop 变动比较频繁,建议每天上班就将 develop 分支合并到 feature,这样避免两个分支差别太大,造成 feature 不能合并到 develop分支,或者需要很长时间解决冲突。
- feature 分支也要时刻提交代码。万一机器坏了...
提交信息规范
Conventional Commits
是一种提交消息的规范格式
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
例如:
/*
<类型>[可选的作用域]: <描述>
*/
feat(login): add login form validation
/*
<类型>[可选的作用域]: <描述>
[可选的正文]
*/
fix(注册): 修复用户注册时的验证逻辑错误
之前的逻辑判断漏掉了对用户名长度的限制,导致用户可以注册过长的用户名,现在已经修复了该问题,并增加了相应的验证逻辑。
修复了一个潜在的安全漏洞。
/*
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
*/
feat(auth): 增加JWT认证
- 实现 JWT 生成和验证
- 更新认证中间件
关闭问题 #12345
类型有如下:
feat
:表示引入新的功能(feature)的提交,即添加新的功能特性。fix
:表示修复 bug 的提交,用于修正代码中的错误或问题。docs
:表示文档变更的提交,指示与文档相关的修改,比如更新文档或注释。style
:表示代码样式(style)的修改,通常是不影响代码含义的调整,比如空格、格式化等。refactor
:表示重构代码的提交,即对现有代码结构进行非修复性的修改。test
:表示增加或修改测试的提交,用来新增或调整单元测试、集成测试等测试代码。chore
:表示其他零碎的提交,通常包括构建工具、辅助工具等的修改,比如更新构建脚本、任务管理等。perf
: 性能提升
示例如下:
feat: 添加用户管理模块
fix: 修复用户登录时的密码验证问题
docs: 更新安装指南
style: 格式化用户信息显示界面
refactor: 重构用户信息存储逻辑
test: 添加用户注册模块的单元测试
CMS改造
以CMS为例,常用的分支需要三种:开发分支
、预发布分支
、master分支
。将其重命名并与jenkins同步。具体操作如下:
CMS目前有 4 个分支:
PS ChinaEdu-H5> git branch -r
origin/HEAD -> origin/cms_master
origin/test2
origin/cms_master
origin/cms_pre
origin/cms_test
将分支重命名,分支和环境的对应关系如下:
// 将 test2 分支重命名 develop,对应测试环境
test2 -> develop 对应测试环境
cms_pre -> release 对应预发布环境
cms_master -> master 对应线上环境
例如将 test2
重命名为 develop
:
$ /cms (test2)
$ git pull
Already up to date.
$ /cms (test2)
$ git branch -m test2 develop
$ /cms (develop)
$ git push -u origin :test2 develop
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: To create a merge request for develop, visit:
remote: https://gitlab.xx.com/cms-ui/...
remote:
To https://gitlab.xx.com/cms-ui.git
- [deleted] test2
* [new branch] develop -> develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
另外两个分支也类似。
修改 jenkins 的配置:
- cms-test-pipeline-ui 构建的分支从 test2 改为 develop
- cms-master-pipeline-ui 构建的分支为 从 cms_pre 改为 release
修改分支下的Jenkinsfile文件:
- 修改 develop 分支中 Jenkinsfile 中的
def GIT_BRANCH = "develop"
- 修改 release 分支中 Jenkinsfile 中的
def GIT_BRANCH = "release"
Tip:由于每个分支下的 cicd 中的内容可能不同,这里使用 .gitattributes
。比如有一个文件 Dockerfile
,在两个分支中它是不同的,合并时不想弄乱,可以这么做:
- 在根目录下创建 .gitattibutes 文件,并设置内容
Dockerfile merge=ours
- 设置git merge的配置项
git config --global merge.ours.driver true
当你合并其他分支时,如果生效,在命令行中会显示:
$ git checkout branchA
$ git merge branchB
Auto-merging Dockerfile
Merge made by recursive.
Tip:需要注意的是,gitattribute 方法生效是有条件的,跟文件的修改时间顺序有关系。比如在 pre 分支中合并 develop,如果不想 pre 分支中 Dockerfile 被覆盖,需要 pre 中的 Dockerfile 更新
,也就是要比 develop 中的 Dockerfile 修改时间更加接近现在。
Q/A
问:使用哪个分支开发,哪个分支发布
答:从 develop 分支拉取 feature 分支进行开发,用 release 分支预发布,用 master 发布。
问:修复线上bug的流程是什么,如何避免修复完了下次却又出现了
答:直接从master分支拉取 hotfixes 分支开发,然后合并到 develop 分支到测试环境测试,如果紧急则直接合并到 release,在预发布测试通过后合并到 master,最后不要忘记合并到 develop
问:cms分支有十多个,是否都有用
答:没有用的分支尽快删除
问:如何快速找到之前某次功能开发,或某次bug修复
答:使用Conventional Commits
提交规范
问:dist 需要提交吗?
答:不需要,jenkins 会自己构建。
前端 Git 使用约定的更多相关文章
- 最全的前端Git基础命令,看完保证你会!
常见信息 master: 默认开发分支 origin:默认远程版本库 Head: 默认开发分支 Head^:Head 的父提交 创建新仓库 git init git init [project-nam ...
- 前端-git思维导图笔记
命令汇总 git config配置本地仓库 常用git config --global user.name.git config --global user.email git config --li ...
- vue单页(spa)前端git工程拆分实践
背景 随着项目的成长,单页spa逐渐包含了许多业务线 商城系统 售后系统 会员系统 ... 当项目页面超过一定数量(150+)之后,会产生一系列的问题 可扩展性 项目编译的时间(启动server,修改 ...
- 【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知
前言 不知不觉来百度已有半年之久,这半年是996的半年,是孤军奋战的半年,是跌跌撞撞的半年,一个字:真的是累死人啦! 我所进入的团队相当于公司内部创业团队,人员基本全部是新招的,最初开发时连数据库都没 ...
- 基于GitLab的前端Assets发布体系
以SVN+RMS为核心的发布系统,对前端开发的影响上来看,存在以下问题: 覆盖式的发布,容易导致线上问题. js一旦发布,就有可能被任意其他页面使用.被引用的越多,就越重要.一旦核心js出现故障,影响 ...
- Git命令详解(一)-个人使用
本文暂时不会涉及到团队如何使用Git的内容,而是从个人的角度探讨如何用好Git. 约定 绿色的5位字符表示提交的ID,文中用<commit>表示,分别指向父节点.分支用橘色显示,分别指向特 ...
- git 命令详细
git是代码管理工具 github是基于git实现的代码管理平台 git --version 查看git版本 git remote -v 查看clone地址 git init 初始化git //全局设 ...
- docker 发布应用时添加 git revision
概要 实施步骤 获取 git revision 前端 git revision 注入 后端 git revision 注入 概要 docker 发布应用时, 将 git revision 注入到应用中 ...
- git常用命令总结——覆盖日常开发全操作
前言:Git是目前世界上最先进的分布式版本控制系统,对的,最先进! 1. 版本库,又名仓库,repository 可理解成一个目录,目录里的所有文件都可被Git管理,Git可以跟踪每个文件的修改.删除 ...
- Git的学习和使用
1.1. Git 了解git的仓库概念 熟悉何为版本控制,了解分布式版本控制(git)和集中式版本控制(svn) 能够熟练使用git的基本指令完成仓库的初始化/添加/提交/日志/回退/分支等操作 gi ...
随机推荐
- 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用
在我们展示一些参考信息的时候,有所会用树形列表来展示结构信息,如对于有父子关系的多层级部门机构,以及一些常用如字典大类节点,也都可以利用树形列表的方式进行展示,本篇随笔介绍基于WPF的方式,使用Tre ...
- js合并对象常用方法
const person = { name: 'David Walsh', gender: 'Male' }; const tools = { computer: 'Mac', editor: 'At ...
- md5sum 文件一致性校验
1. 背景 在网络传输.设备之间转存.复制大文件等时,可能会出现传输前后数据不一致的情况.这种情况在网络这种相对更不稳定的环境中,容易出现.那么校验文件的完整性,也是势在必行的. md5sum命令用于 ...
- 蓝桥杯真题——第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组
- Android应用中对于微信分享的实例及问题
源码地址 如何分享 分享无相应 分享结果如何接收响应 微信 分享回调 (提示几点关键问题: debug_key 一定要获得对应的签名码 然后和weixin官网的appid对应 ) 几点注意 ...
- 第五周单元测验题英语教学与互联网 mooc
第五周单元测验题 返回 本次得分为:16.00/20.00, 本次测试的提交时间为:2020-08-30, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 单选(2分) 从评价的主体来看, ...
- 轻松掌握组件启动之MongoDB(上):高可用复制集架构环境搭建
MongoDB复制集 复制集架构 在生产环境中,强烈不建议使用单机版的MongoDB服务器.原因如下: 单机版的MongoDB无法保证系统的可靠性.一旦进程发生故障或是服务器宕机,业务将直接不可用.此 ...
- 图形学、02 推导证明 | 任意一点经过透视投影后 z 坐标相对于之前有什么变化
齐次坐标知识点: \(\begin{bmatrix} x \\ y \\ z \\ 1 \\\end{bmatrix} \Rightarrow\begin{bmatrix} nx \\ ny \\ n ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-21-处理鼠标拖拽-番外篇
1.简介 前边宏哥拖拽有提到那个反爬虫机制,加了各种参数,以及加载js脚本文件还是有问题,偶尔宏哥好像发现了解决问题的办法,看到了黎明的曙光,宏哥就说试一下看看行不行,万一实现了.结果宏哥试了结果真的 ...
- USB TYPE-C PIN定义
USB TYPE-C 母座 USB TYPE-C 公头