Git 是目前最流行的版本控制工具,书写良好的 commit message 能极大提高代码维护效率。但在日常开发中,由于缺乏约束,提交内容往往随意、质量参差不齐,导致可读性低且难以追溯。在项目中引入 commit message 规范已是迫在眉睫。
用什么规范?
目前业界比较成熟的方案是约定式提交规范(Conventional Commits),它借鉴了 Angular 的提交准则,是一种基于提交消息的轻量级约定。该规范提供了一组用于创建清晰提交历史的简单规则,使得编写基于规范的自动化工具变得更容易。它与 SemVer 语义化版本相吻合,能在提交信息中明确描述新特性、bug 修复和破坏性变更。
其标准格式如下:
<类型>[可选的作用域]: <描述> [可选的正文] [可选的脚注]
快速开始
1. 全局安装 commitizen & cz-conventional-changelog
commitizen 是一个撰写合格 commit message 的工具,用于替代原生的 git commit 指令;而 cz-conventional-changelog 适配器则提供约定式提交标准。基于不同需求,也可以使用不同的适配器。
npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
安装完毕后,可直接使用 git cz 来取代 git commit。在全局模式下,需要 ~/.czrc 配置文件为 commitizen 指定 Adapter。
2. 项目内安装 commitlint & husky
commitlint 负责校验 commit message 的格式,husky 则提供更易用的 git hook 支持。
# npm
npm i -D husky @commitlint/config-conventional @commitlint/cli
# yarn
yarn add husky @commitlint/config-conventional @commitlint/cli -D
需要注意的是,commitlint 只能做格式规范,无法触及内容质量。对于内容质量的把控,仍需依靠团队内部的约定。
3. 添加相应配置
首先创建 commitlint.config.js 文件(通常与 package.json 同级):
module.exports = {extends: ["@commitlint/config-conventional"]};
接着在 package.json 中引入 husky 钩子:
{
"husky": {


