开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情
前言
在上文中,记录了如何使用git提交规范化工具commitizen
去解决代码提交规范的问题。但是新的问题又出现了,如果出现了忘记使用git cz而使用了git commit -m '描述信息',我们如何去解决这个问题。
解决这个问题,我们可以使用git hooks
,他与vue的生命周期有些相似,会在某个特定的时间执行一些其他操作,那么在这个操作中,我们就可以阻止不规范的消息的提交。
git hooks
有很多,我们需要使用的有两个
- pre-commit:
git commit
执行前 它不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。脚本git commit
以非零状态退出会导致命令在创建提交之前中止 - commit-msg:
git commit
执行前 可用于将消息规范化为某种项目标准格式。 还可用于在检查消息文件后拒绝提交。
pre-commit
在提交前被调用,可以按需指定是否要拒绝本次提交。而commit-msg
可以用来规范化标准格式,并且可以按需指定是否要拒绝本次提交
实现
实现该功能需要两个工具
commitlint
: 用于检查提交信息
husky
: git hooks工具
commitlint
安装
npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4
新建
commitlint.config.js
并配置
module.exports = {
// 继承的规则
extends: ['@commitlint/config-conventional'],
// 定义规则类型
rules: {
// 表示 git 提交的 type 必须在以下类型范围内
'type-enum': [
2,
'always',
[
'feat', // 新功能 feature
'fix', // 修复 bug
'docs', // 文档注释
'style', // 代码格式(不影响代码运行的变动)
'refactor', // 重构(既不增加新功能,也不是修复bug)
'perf', // 性能优化
'test', // 增加测试
'chore', // 构建过程或辅助工具的变动
'revert', // 回退
'build' // 打包
]
],
// subject 大小写不做校验
'subject-case': [0]
}
}
其中的type类型就是在上文.cz-config.js
定义的可选类型
husky
安装
npm install husky@7.0.1 --save-dev
启动 hooks
, 可以看到生成 了.husky
文件夹
npx husky install
生成prepare
指令
npm set-script prepare "husky install"
执行prepare
指令
npm run prepare
执行如下指令
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
可以看到.husky
发生变化
以上完成后,再使用git commit时
可以看到阻止了提交