Skip to content

一、commitlint

1. commitlint的由来

虽然已经使用commitizen的 git cz 来代替了 git commit 实现了规范化的提交诉求,但是依然存在着有人 会忘记使用的问题,这样的提交是应该被阻止提交的。 从这我们就可以知道:commitlint 用于检查提交信息

2. git hooks

  • 相关概念参考官网

  • 重点

    Git Hook调用时机说明
    pre-commitgit commit执行前
    它不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。脚本git commit以非零状态退出会导致命令在创建提交之前中止。
    可以用git commit --no-verify绕过
    commit-msggit commit执行前
    可用于将消息规范化为某种项目标准格式。
    还可用于在检查消息文件后拒绝提交。
    可以用git commit --no-verify绕过

    简单的来说:

    1. commit-msg:可以用来规范化标准格式,并且可以按需指定是否要拒绝本次提交。
    2. pre-commit:会在提交前被调用,并且可以按需指定是否要拒绝本次提交。

3. commitlint 的安装 【需要**npm 需要在 7.x 以上版本 或者 node 版本 v16 以上**】

  • 安装依赖

    shell
    npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4
  • 创建 commitlint.config.js 文件

    shell
    echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
  • 打开 commitlint.config.js , 增加配置项( config-conventional 默认配置点击可查看 ):

    javascript
      module.exports = {
        // 继承的规则
        extends: ['@commitlint/config-conventional'],
        // 定义规则类型
        rules: {
        // type 类型定义,表示 git 提交的 type 必须在以下类型范围内
        'type-enum': [
        2,
        // 在什么情况下验证
        'always',
        // 泛型内容
        [
          'feat', // 新功能 feature
          'fix', // 修复 bug
          'docs', // 文档注释
          'style', // 代码格式(不影响代码运行的变动)
          'refactor', // 重构(既不增加新功能,也不是修复bug)
          'perf', // 性能优化
          'test', // 增加测试
          'chore', // 构建过程或辅助工具的变动
          'revert', // 回退
          'build' // 打包
        ]
        ],
        // subject 大小写不做校验
        'subject-case': [0]
        }
      }
  • 注意:确保保存为 UTF-8 的编码格式**,否则可能会出现以下错误:SyntaxError: Invalid or unexpected token

  • 自定义 rules

    javascript
      module.exports = {
      // 继承的规则
      extends: ['@commitlint/config-conventional'],
      // 定义规则类型
      rules: {
        'custom-rules': [2, 'always'],
        // subject 大小写不做校验
        'subject-case': [0],
      },
      plugins: [
        {
          rules: {
            'custom-rules': ({ subject }) => {
              const prefix = '#';
              return [subject.includes(prefix), '必须包含#']
            }
          }
        }
      ]
    }

4. husky 的安装 【需要**npm 需要在 7.x 以上版本 或者 node 版本 v16 以上**】

  • 安装依赖:

    shell
    npm install husky@7.0.1 --save-dev
  • 启动 hooks , 生成 .husky 文件夹

    shell
    npx husky install

    git-commit-husky-install.png

  • package.json 中生成 prepare 指令( 需要 npm > 7.0 版本

    shell
    npm set-script prepare "husky install"

    git-commit-husky-prepare.png

  • 执行 prepare 指令

    shell
    npm run prepare
  • 执行成功,提示 git-commit-prepare-success.png

  • 添加 commitlinthookhusky中,并指令在 commit-msghooks 下执行 npx --no-install commitlint --edit "$1" 指令

    shell
    npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
  • 此时的 .husky 的文件结构
    git-commit-husky-msg.png

  • 至此,不符合规范的 commit 将不再可提交 git-commit-husky.png

Released under the MIT License.