git hooks阻止不规范提交

217 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

前言

在上文中,记录了如何使用git提交规范化工具commitizen去解决代码提交规范的问题。但是新的问题又出现了,如果出现了忘记使用git cz而使用了git commit -m '描述信息',我们如何去解决这个问题。

解决这个问题,我们可以使用git hooks,他与vue的生命周期有些相似,会在某个特定的时间执行一些其他操作,那么在这个操作中,我们就可以阻止不规范的消息的提交。

git hooks有很多,我们需要使用的有两个

  1. pre-commit: git commit执行前 它不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。脚本git commit以非零状态退出会导致命令在创建提交之前中止
  2. 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

1.png

生成prepare 指令

npm set-script prepare "husky install"

2.png

执行prepare指令

npm run prepare

执行如下指令

npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

可以看到.husky发生变化

3.png

以上完成后,再使用git commit时 4.png

可以看到阻止了提交