求求你了!别瞎提交代码了,看人家 Git 提交规范那叫一个舒服!
点击下方公众号「关注」和「星标」
回复“1024”获取独家整理的学习资料!
git是现在市面上最流行的版本控制工具(图文详解 Git 工作原理),书写良好的commit message能大大提高代码维护的效率。但是在日常开发中由于缺少对于commit message的约束,导致填写内容随意、质量参差不齐,可读性低亦难以维护。在项目中引入commit message规范已是迫在眉睫。
用什么规范?
现在市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据。约定式提交规范是一种基于提交消息的轻量级约定。它提供了一组用于创建清晰的提交历史的简单规则;这使得编写基于规范的自动化工具变得更容易。这个约定与SemVer相吻合,在提交信息中描述新特性、bug 修复和破坏性变更。它的 message 格式如下:
<类型>[可选的作用域]: <描述>[可选的正文][可选的脚注]
Quick Start
1.全局安装commitizen & cz-conventional-changelog
commitizen是一个撰写合格commit message的工具,用于代替git commit 指令,而cz-conventional-changelog适配器提供conventional-changelog标准(约定式提交标准)。基于不同需求,也可以使用不同适配器。全网最全的 Git 分支开发规范手册
npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
安装完毕后,可直接使用git cz来取代git commit。
全局模式下,需要 ~/.czrc 配置文件, 为commitizen指定Adapter。
2.项目内安装commitlint & husky
commitlint负责用于对commit message进行格式校验,husky负责提供更易用的git hook。万字详解!Git 入门最佳实践
Use npm
npm i -D husky @commitlint/config-conventional @commitlint/cliUse yarn
yarn add husky @commitlint/config-conventional @commitlint/cli -D
commitlint只能做格式规范,无法触及内容。对于内容质量的把控只能靠我们自己。
3. 添加相应配置
创建commitlint.config.js
# In the same path as package.jsonecho 'module.exports = {extends: ["@commitlint/config-conventional"]};' > ./commitlint.config.js引入husky# package.json...,
"husky": {"hooks": {"commit-msg": "commitlint -e $GIT_PARAMS"}
}
4. 使用
执行git cz进入interactive模式,根据提示依次填写
1.Select the type of change that you're committing 选择改动类型 (<type>)2.What is the scope of this change (e.g. component or file name)? 填写改动范围 (<scope>)3.Write a short, imperative tense description of the change: 写一个精简的描述 (<subject>)4.Provide a longer description of the change: (press enter to skip) 对于改动写一段长描述 (<body>)5.Are there any breaking changes? (y/n) 是破坏性修改吗?默认n (<footer>)6.Does this change affect any openreve issues? (y/n) 改动修复了哪个问题?默认n (<footer>)
生成的commit message格式如下:
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
填写完毕后,husky会调用commitlint对message进行格式校验,默认规定type及subject为必填项。
任何git commit指令的option都能用在 git cz指令上, 例如git cz -a
Commit message规范在rrd-fe落地使用情况
针对团队目前使用的情况,我们讨论后拟定了commit message每一部分的填写规则。
1. type
type为必填项,用于指定commit的类型,约定了feat、fix两个主要type,以及docs、style、build、refactor、revert五个特殊type,其余type暂不使用。
# 主要type
feat: 增加新功能
fix: 修复bug# 特殊type
docs: 只改动了文档相关的内容
style: 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
build: 构造工具的或者外部依赖的改动,例如webpack,npm
refactor: 代码重构时使用
revert: 执行git revert打印的message# 暂不使用type
test: 添加测试或者修改现有测试
perf: 提高性能的改动
ci: 与CI(持续集成服务)有关的改动
chore: 不修改src或者test的其余修改,例如构建过程或辅助工具的变动
当一次改动包括主要type与特殊type时,统一采用主要type。
2. scope
scope也为必填项,用于描述改动的范围,格式为项目名/模块名,例如:node-pc/common rrd-h5/activity,而we-sdk不需指定模块名。如果一次commit修改多个模块,建议拆分成多次commit,以便更好追踪和维护。
3. body
body填写详细描述,主要描述改动之前的情况及修改动机,对于小的修改不作要求,但是重大需求、更新等必须添加body来作说明。
4. break changes
break changes指明是否产生了破坏性修改,涉及break changes的改动必须指明该项,类似版本升级、接口参数减少、接口删除、迁移等。
5. affect issues
affect issues指明是否影响了某个问题。例如我们使用jira时,我们在commit message中可以填写其影响的JIRA_ID,若要开启该功能需要先打通jira与gitlab。参考文档:docs.gitlab.com/ee/user/pro…
填写方式例如:
re #JIRA_ID
fix #JIRA_ID
示例
完整的commit message示例
相应的git log
如果你喜欢这篇文章,希望能动动小手点个在看与转发支持一波。
人人贷大前端技术中心
juejin.im/post/5d0b3f8c6fb9a07ec07fc5d0
推荐阅读 点击标题可跳转
超牛逼!这款轻量级性能监控系统真强大~
从 0 到 1 手把手教你制作酷炫可视化大屏
超详细!K8s 面试题总结
这篇 ElasticSearch 详细使用教程,内部分享时被老大表扬了
MySQL 8.0 的 5 个新特性,太实用了!
软件系统高可用架构思考
这一份最全的TCP总结,请务必收下
API 快速开发平台设计思考
求求你了!别瞎提交代码了,看人家 Git 提交规范那叫一个舒服!相关推荐
- git创建仓库,并提交代码(第一次创建并提交)(转)
一直想学GIT,一直不曾学会.主要是GUI界面的很少,命令行大多记不住.今天尝试提交代码,按GIT上给的方法,没料到既然提交成功了. 于是把它记下来,方便以后学习. 代码是学习用的,没多大意义: 下图 ...
- git创建仓库,并提交代码(第一次创建并提交)
一直想学GIT,一直不曾学会.主要是GUI界面的很少,命令行大多记不住.今天尝试提交代码,按GIT上给的方法,没料到既然提交成功了. 于是把它记下来,方便以后学习. 代码是学习用的,没多大意义: 下图 ...
- 提交代码遇到 Everything up-to-date 或 提交代码遇到 On branch master Your branch and ‘origin/master‘ have diverg
提交代码遇到 Everything up-to-date 提交代码遇到『Everything up-to-date』 提交代码遇到 On branch master Your branch and ' ...
- github提交代码命令(向开源社区提交代码)
#若没有添加远程地址,则添加,取名如upgrade git remote add upgrade https://github.com/apache/druid.git 拉取远程最新代码upgrade ...
- git 回滚/撤回提交代码、误删、误提交恢复
git回滚找回代码 上情况 情况1 git pull的时候发生冲突,修改失误,并commit了,怎么恢复? 查看所有的commit提交日志,并获取提交id git log commit 0992046 ...
- git 提交代码某个文件夹一直提交不上去
问题描述: 这个文件夹是直接拷贝过去的,在提交到远程仓库是出现了问题. 问题分析: 直接拷贝过去的文件夹里面有个 .git 的文件,所以在执行 git status 的时候出现 modified: t ...
- git idea 修改提交信息_idea中修改git提交代码的用户名和邮箱地址
Idea中使用git 命令窗口 依次打开idea->file->settings->tools->Terminal 在shell path 选择git安装目录bin中的bash ...
- 用Prettier和ESlint来统一提交代码
2019独角兽企业重金招聘Python工程师标准>>> 为什么使用 很遗憾,JavaScript没有官方的代码风格.业界有一些流行的代码风格,比如Airbnb和Standard.使用 ...
- 强强联合!Papers with Code 携手 arXiv,上传论文、提交代码一步到位
转自 | 机器之心 作者 | 魔王 刚刚,机器学习资源网站 Papers with Code 宣布与论文预印本平台 arXiv 进行合作,论文作者在 arXiv 上上传论文时可以同步上传官方和社区代码 ...
- 强强联合!Papers with Code携手arXiv,上传论文、提交代码一步到位
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 刚刚,机器学习资源网站 Papers with Code 宣布与论文预印本平台 arXiv 进 ...
最新文章
- 一维二维码的提取、识别和产生
- operator new在C++中的各种写法
- python进程通信方式有几种_python全栈开发基础【第二十一篇】互斥锁以及进程之间的三种通信方式(IPC)以及生产者个消费者模型...
- android 评论的展开功能,Android开发实现ListView点击展开收起效果示例
- JAVA JDK windows环境搭建
- 用DSA或者RSA进行加密或者数字签名
- git pull 提示当前不在某个分支上解决办法
- Unrecogized font family ‘Ionicons’ 在ios上报错,android正常
- 【MOOC】建筑智能化系统工程(南工职)(1)基础知识
- 个人公众号注销方法_微信公众号注销后怎么申请 恢复公众号的方法步骤
- 利用INFOPATH2007VS2005开发MOSS工作流详解 --收藏
- 美团 java_GitHub - meituan/mssapi_java: 美团云对象存储 Java SDK
- teradata查看正在运行的进程_一种基于greenplum数据库的状态检查及性能监控工具.doc...
- system函数和signal(SIGCHLD, SIG_DFL)的“固定搭配”
- 【功能测试】软件系统测试报告
- linux的软件包管理
- 倍福NC轴编码器Enc parameters释义
- H264编码和M-JPEG、HEVC
- 培训计算机安排工作岗位,计算机岗位实习报告
- DApp生死局 | 路往何方?