使用 commitlint 规范和校验 Git 提交

3 min read

在团队协作开发的项目中,清晰的 Git 提交信息对于代码维护有很大的帮助。规范化的提交信息, 有利于代码可读性,易于追踪更改,结合自动化工具可以根据信息内容自动生成版本更新差异文档和决定版本升级策略。

本文介绍如何使用 commitlint (opens in a new tab) 规范和校验 Git 提交。

1. 安装

npm install --save-dev @commitlint/config-conventional @commitlint/cli

2. 配置使用 Conventional Commits (opens in a new tab)

.commitlintrc.json 中添加以下配置

.commitlintrc.json
{
  "extends": ["@commitlint/config-conventional"]
}

也可以通过命令行添加

echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js

这里我们配置使用 Conventional Commits (opens in a new tab) 的校验规则。 如果项目有自己的规则也可以设置自定义规则 (opens in a new tab)

Conventional Commits (opens in a new tab) 这一规范强制开发者按照特定的格式编写提交消息。

一般按照以下的规则:

type(scope?): subject
body?
footer?

3. 通过 husky 添加 Git 钩子

husky (opens in a new tab) 这个工具可以方便的为项目添加和管理 Git 钩子, 这里我们添加一个 commit-msg 的钩子,在其中使用 commitlint 来校验 Git 提交信息是否符合规则。

npm install husky --save-dev
npx husky add .husky/commit-msg  'npx --no -- commitlint --edit ${1}'

4. 测试

直接测试上一次 commit 是否符合规则

npx commitlint --from HEAD~1 --to HEAD --verbose

或者直接提交,看是否触发了 Git 钩子和 commitlint 校验

git commit -m "foo: this will fail"
husky > commit-msg (node v10.1.0)
No staged files match any of provided globs.
   input: foo: this will fail
   type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum]
 
   found 1 problems, 0 warnings
   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
 
husky > commit-msg hook failed (add --no-verify to bypass)

参考链接

2024 © OXXD.RSS