使用 commitlint 规范和校验 Git 提交

154 阅读2分钟

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

本文介绍如何使用 commitlint 规范和校验 Git 提交。

1. 安装

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

2. 配置使用 Conventional Commits

.commitlintrc.json 中添加以下配置

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

也可以通过命令行添加

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

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

Conventional Commits 这一规范强制开发者按照特定的格式编写提交消息。

  • 类型(Type):表示提交的类别,例如 feat(新特性)、fix(修复 bug)、docs(文档更新)等。
  • 作用域(Scope):表示修改影响的范围,例如某个模块、组件等。
  • 描述(Subject):简明扼要地描述了提交的目的和内容。

一般按照以下的规则:

type(scope?): subject
body?
footer?

3. 通过 husky 添加 Git 钩子

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

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

2024-05-31 更新

husky v9 之后添加新的 Git 钩子只需要添加新的文件即可:

# 例如:
# echo "npm test" > .husky/pre-commit
echo "npx --no -- commitlint --edit ${1}" > .husky/commit-msg

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)

参考链接