本篇文章主要记录git提交信息规范化
目的
- 统一团队Git Commit标准,便于后续代码review、版本发布、自动化生成change log;
- 可以提供更多更有效的历史信息,方便快速预览以及配合cherry-pick快速合并代码;
- 团队其他成员进行类git blame时可以快速明白代码用意;
message信息格式采用目前主流的Angular规范,这是目前使用最广的写法,比较合理和系统化,并且有配套的工具
commit message格式说明
Commit message一般包括三部分:Header、Body和Footer。
Header
type(scope): subject
- type:用于说明commit的类别,规定为如下几种
- scope:【可选】用于说明commit的影响范围,比如: route, component, utils, build..
- subject:commit的简要说明,尽量简短
| type | |
|---|---|
| feat | 新增功能 |
| fix | 修复bug |
| docs | 修改文档 |
| refactor | 代码重构,未新增任何功能和修复任何bug |
| build | 改变构建流程,新增依赖库、工具等(例如webpack修改); |
| style | 仅仅修改了空格、缩进等,不改变代码逻辑; |
| perf | 改善性能和体现的修改 |
| chore | 非src和test的修改的其他修改不在上述修改; |
| test | 测试用例的修改 |
| ci | 自动化流程配置修改; |
| revert | 回滚到上一个版本 |
还有一些其他的例如
workflow:工作流相关文件修改可以自定
body
对本次commit的详细描述,可分多行
foote
对本次commit的详细描述,可分多行
- 不兼容变动:需要描述相关信息
- 关闭指定Issue:输入Issue信息
commit message工具
Commitizen是一个主流的 Commit message 的生成工具,支持Angular的commit message格式,被众多主流框架采用
// 安装
$ npm install -g commitizen
// 在项目根目录中执行以下命令初始化cz-conventional-changelog
commitizen init cz-conventional-changelog --save --save-exact
然后会在package.json中出现以下配置
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
然后后面将git commit命令改成git cz
将会出现命令行交互界面如下
进行相应的选择后即可按照规范编写提交信息并提交
commit提交信息验证
commitlint 是一个commit信息提交验证工具
使用
npm install --save-dev @commitlint/cli @commitlint/config-conventional husky
// 编写配置文件commitlint.config.js
module.exports = {
extends: ['@commitlint/config-conventional'],
};
// 初始化 husky
npx husky install
// 添加提交钩子
npx husky add .husky/commit-msg "npx --no-install commitlint --edit $1"
// 配置完后 后面在使用git commit 提交的信息都会进过验证 不符合规范将不予以提交
commitlint也可以自定义提交规则 具体可以去查看官网~