commitlint 是一个开源工具,用于规范化和验证 Git 提交消息的格式。它通常与约定式提交规范(Conventional Commits)一起使用,旨在帮助团队创建一致的提交消息格式,并确保提交消息包含必要的信息。
commitlint 仅仅是负责验证提交是否符合约定式提交规范的工具。不过,可以通过挂载 git 的钩子(借助 husky)来实现在提交消息时验证消息是否符合规范。
开始
bash
npm install --save-dev @commitlint/config-conventional @commitlint/cli
# 配置使用的规范
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
上面的 commitlint.config.js
是 commitlint 的配置文件,配置文件可以定义在 commitlint.config.js
、.commitlintrc.js
、 .commitlintrc
、.commitlintrc.json
、 .commitlintrc.yml
或 package.json
的 commitlint
中。
此时就可以使用 commitlint 验证提交信息,进入某个配置 git 的仓库/项目:
bash
npx commitlint --to HEAD --verbose
husky
husky 是一个用于管理 git 钩子(git hooks)的工具,它可以帮助开发团队在代码提交和其他 git 操作前后运行自定义的脚本。通过 husky,您可以轻松地配置和管理各种 git 钩子,以执行预定义的任务,例如代码格式化、单元测试、代码审查等。
bash
# 安装
npm install --save-dev husky
# 激活 husky
npx husky install
安装并激活 husky 后,就可以在 git 的 commit-msg
钩子上挂载 commitlint 的提交信息检查:
bash
# 在 commit-msg 钩子上直接运行 commitlint 的方式
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit ${1}'
# 或(二选一)
# 在 package.json 中配置脚本的方式
npm pkg set scripts.commitlint="commitlint --edit"
npx husky add .husky/commit-msg 'npm run commitlint ${1}'
现在简单测试一下,当提交时,运行被挂载的脚本或命令执行 commitlint 检查:
bash
git commit -m "foo: this will fail" # 输出报错,阻止提交
自 commitlint v8.0.0 版本后,如果提交没有任何问题将不会有任何输出。
交互式提交
@commitlint/prompt-cli
@commitlint/prompt-cli
是一个用于在命令行界面(CLI)中提示用户输入标准格式的提交消息的工具。并确保它们遵守 commitlint.config.js
中配置的提交约定。它是 commitlint 生态系统中的一部分。
bash
# 安装
npm install --save-dev @commitlint/prompt-cli
# 配置 prompt-cli 运行脚本
npm pkg set scripts.commit="commit"
# 运行提交
npm run commit
commitizen(推荐)
commitizen 提供了一种更现代的交互方式的命令行界面(CLI),更多详情参考:约定式提交规范三部曲(二)之 Commitizen
cz-conventional-template-zh-cn(commitizen的多仓库/项目方式,强烈推荐)
作者发布在 npmjs 通用的可应用于多仓库/项目(multi-repo)的简体中文模块 ,目前作者的所有项目全部都基于此模板进行规范化提交。
- 内部集成 cz-conventional-changelog-zh-cn 适配器,完全兼容 Angular 团队的提交信息规范标准。
- 集成 commitizen,无需另行下载额外配置。
- 通用简体中文模板,统一标准服务多(单)仓库/项目。
该方式与 commitizen 方式完全一样,只不过是使用 commitizen 的多仓库/项目方式。
更多
config-conventional
在上面的 commitlint.config.js
配置文件中,我们配置了 config-conventional
规范,是用于定义和配置提交消息的规范,比如定义了提交类型、提交范围和提交描述等,而 commitlint 则可以根据这些规范对提交消息进行验证,确保符合规范要求。如果提交消息不符合约定的规范,commitlint 可以发出警告或阻止提交,从而帮助团队保持提交消息的一致性和规范性。
CI 持续集成
CI(Continuous Integration)持续集成,是一种软件开发实践,它通过自动化的构建和测试流程,确保团队成员的代码变更能够快速、可靠地集成到共享的代码库中。commitlint 可应用于持续集成中,更多信息可参考 Guide: CI Setup。