git commit规范化
项目中,每次使用git提交代码时都需要填写提交信息,每个人填写提交信息的风格都不一样,为了保持项目中git commit一致性,就需要对git commit进行规范化处理,规范的git commit 可以让项目的提交信息整洁明了,也可以让我们通过提交信息可以清晰的知道本次提交的内容,出现问题时也可以更快速的查询问题,如果项目需要生成changelog日志,规范的git commit可以让我们使用工具快速生成changelog日志
目前git commit 规范使用最多的是按照Angular团队使用的规范,提交信息都包括三个部分:Header,Body 和 Footer,如下:
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
其中,Header 是必需的,Body 和 Footer 可以省略。
项目中使用:
1、安装commitizen
依赖
npm install --save-dev commitizen
使用commitizen
的命令是git-cz
,如果我们全局安装commitizen
,就可以直接在项目中使用git-cz
命令,否则需要使用npx git-cz
来执行,为了以后使用方便,我们可以在package.json
的scripts
中进行如下配置:
// package.json
{
"scripts": {
...
"commit": "git-cz",
...
}
}
这样我们就可以通过在命令行工具中使用npm run commit
来使用commitizen
2、commitizen
需要配合着适配器使用,安装cz-conventional-changelog
依赖,可以让我们自己项目的git提交信息符合Angular团队的规范
npm install --save-dev cz-conventional-changelog
在package.json
文件中配置cz-conventional-changelog
的使用:
// package.json
{
...
"config": {
"commitizen": {
"path": "node_modules/cz-conventional-changelog"
},
}
...
}
此时,在提交代码时,我们就可以通过npm run commit
命令按照Angular团队的规范来提交信息。但是由于没有进行强制校验,如果还是按照以往使用git commit -m <提交信息>
提交任何风格的信息也是可以的,为了保证提交信息规范性,使用husky
、commitlint
对提交信息进行强制校验,其中commitlint
用于校验提交信息是否符合规范,使用husky
的commit-msg
钩子可以让我们在每次提交信息前触发commitlint
校验。
3、信息校验时除了安装@commitlint/cli
和husky
外,还要按照需要遵循的规则,我们继续使用Angular团队信息提交规范,安装@commitlint/config-conventional
;
npm install --save-dev @commitlint/config-conventional @commitlint/cli
npm install --save-dev husky
然后在package.json
中配置commitlint
和husky
如下:
// package.json
{
...
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
...
}
husky
可以在我们执行git commit
调用commitlint
对提交信息进行格式校验,校验失败则提交失败,只有校验成功才能提交
至此,git commit
规范化已完成,我们可以使用npm run commit
采用问答交互式的方法创建git commit
,也可以自行按照规范进行git commit
提交。
可能遇到的问题:
1、安装之后,git commit
时husky
校验提交信息不生效
解决办法:git版本太低,升级git版本可解决,husky
要求的git版本最低2.13.2
2、在执行npm run commit
在git中出现交互式界面时,上下选择不生效(针对windows用户)
解决办法:在C盘》用户》自己名字 目录下找到.bashrc文件,在文件中添加alias npm='winpty npm.cmd'
,保存即可
参考文献:
[1] 优雅的提交你的 Git Commit Message
[2] Commit message 和 Change log 编写指南