Skip to content

Git Commit Lint

1. 校验 commit 信息

1.1. 安装依赖

bash
npm i -D @commitlint/cli @commitlint/config-conventional husky
详细说明
  • @commitlint/cli:提供命令行工具来校验 commit message
  • @commitlint/config-conventional:提供常用的 commit message 规范(Angular 风格)
  • husky:用 Git 钩子在 git commit 时触发 commitlint

1.2. package.json 中增加 husky 安装脚本

json
{
  "scripts": {
    "prepare": "husky install"
  }
}

1.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:页脚前必须有空行。

1.4. Husky 钩子配置

提示

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

1.4.1. 创建 commit-msg 钩子

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

提示

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

提示

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

1.4.2. 创建 pre-commit 钩子

bash
# 例如:
pnpm lint && pnpm format
# 建议不要在 pre-commit 钩子中执行 全量命令,会导致提交缓慢,可配合 lint-staged 只针对暂存文件执行命令。

2. lint-staged

2.1. 安装依赖

bash
npm i -D lint-staged

提示

lint-staged 是一个工具,可以在 git 暂存文件上运行 linters(如 Prettier、ESLint),确保提交的代码符合规范。

2.2. 配置 package.json

package.json 中添加:

json
{
  // ...
  "lint-staged": {
    "src/**/*.{js,ts,jsx,tsx,vue,json}": [
      "pnpm lint",
      "pnpm format"
    ],
    "src/**/*.{css,scss,less}": [
      "pnpm lint",
      "pnpm format"
    ]
  },
}

2.3. Husky 钩子配置

bash
npx --no-install lint-staged

基于 MIT 许可发布