Skip to content

Git Commit Lint

1. 安装依赖

bash
npm i -D @commitlint/cli @commitlint/config-conventional husky lint-staged
详细说明
  • @commitlint/cli:用于检查提交信息格式
  • @commitlint/config-conventional:默认配置
  • husky:Git hooks 工具
  • lint-staged:仅对暂存区文件进行 lint

2. 配置 package.json

package.json 中添加:

json
{
  "type": "module",
  "scripts": {
    "prepare": "husky install"
  },
  "lint-staged": {
    "src/**/*.{js,ts,jsx,tsx,vue}": [
      "prettier --write"
    ],
    "src/**/*.{css,less}": [
      "prettier --write"
    ],
    "src/**/*.{json,md}": [
      "prettier --write"
    ]
  },
}

3. 创建 commitlint 配置文件

js
export default {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'],
    ],
    'type-case': [2, 'always', 'lower-case'],
    'type-empty': [2, 'never'],
    'subject-empty': [2, 'never'],
    'subject-full-stop': [2, 'never', '.'],
    'header-max-length': [2, 'always', 100],
    'body-leading-blank': [2, 'always'],
    'footer-leading-blank': [2, 'always'],
  },
}
详细说明
  • type-enum:允许的提交类型。
  • type-case:类型必须小写。
  • type-empty:类型不能为空。
  • subject-empty:主题不能为空。
  • subject-full-stop:主题不能以句号结尾。
  • header-max-length:提交头最大长度为 100 字符。
  • body-leading-blank:正文前必须有空行。
  • footer-leading-blank:页脚前必须有空行。

4. 初始化 Husky

提示

钩子需要 chomd +x 赋予可执行权限。

4.1. 创建 commit-msg 钩子

bash
npx --no-install commitlint --edit "$1"

提示

commit-msg 用于验证提交信息本身(比如是否符合 Conventional Commits、长度、内容),也能阻止不合规的提交。

4.2. 创建 pre-commit 钩子

bash
npx --no-install lint-staged

提示

pre-commit 用于在提交前检查或修改工作区/暂存区的代码(如格式化、lint、单元测试、lint-staged),可以在提交之前阻止提交。

基于 MIT 许可发布