Git 提交信息(Commit Message)的规范校验,husky + commitlint
·
1. 安装依赖
npm install --save-dev husky @commitlint/config-conventional @commitlint/cli
2. 启用 Husky
npx husky install
npm pkg set scripts.prepare="husky install" # 自动初始化钩子
3. 配置提交信息规范
(1) 创建 .commitlintrc.js
module.exports = {
extends: ['@commitlint/config-conventional'], // 使用 Angular 提交规范
rules: {
'type-enum': [ // 限定提交类型
2,
'always',
['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'revert']
],
'subject-case': [0] // 不限制主题大小写
}
};
(2) 添加 commit-msg 钩子,下面的命令就是先创建.husky/commit-msg文件,然后在commit-msg里添加npx --no-install commitlint --edit "$1"这一行代码,如果用下面的代码添加不成功,可以手动添加
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
4. 提交示例
允许的提交格式:
git commit -m "feat: 添加登录功能" # 新增功能
git commit -m "fix: 修复按钮点击问题" # 修复 Bug
git commit -m "docs: 更新 README" # 文档变更
被拦截的提交格式:
git commit -m "随便写个提交" # 错误:缺少类型前缀
git commit -m "fix:abc" # 错误:类型后缺少空格和描述
npx --no-install commitlint --edit "$1"这个命令是啥意思
这个命令是 Git 提交信息(commit message)的校验命令,通常用于在 git commit 时强制检查提交信息是否符合团队约定的规范(比如 Angular 规范、Conventional Commits 规范等),核心作用是保证提交信息的一致性和可读性。
我们拆解每个部分来理解:
1. 核心命令:commitlint
commitlint是一个专门用于 校验 Git 提交信息格式 的工具(需提前在项目中配置规则)。- 它会检查提交信息的结构(比如是否包含
type(scope): subject格式,如feat(login): 新增验证码登录功能)、关键词合法性(如type必须是feat/fix/docs等允许值)、长度限制等。 - 若提交信息不符合规则,
commitlint会报错,阻止本次提交。
2. 前置参数:npx --no-install
npx:Node.js 自带的包执行工具,用于直接运行项目依赖中的命令(无需全局安装)。- 这里的
commitlint是项目的局部依赖(需提前通过npm install commitlint --save-dev安装到项目中),npx会自动找到项目node_modules/.bin下的commitlint执行。
- 这里的
--no-install:关键参数,意思是「不自动安装缺失的依赖」。- 若项目中没安装
commitlint,执行此命令会直接报错(而不是自动下载安装),避免意外安装不兼容版本或冗余依赖。
- 若项目中没安装
3. 命令参数:--edit "$1"
--edit:commitlint的核心参数,意思是「读取并校验指定文件中的提交信息」。"$1":Shell 脚本中的位置参数,表示「第一个传入脚本的参数」。- 在 Git 钩子场景中(通常是
commit-msg钩子),$1会被 Git 自动填充为「临时存储提交信息的文件路径」(比如.git/COMMIT_EDITMSG)。 commitlint会读取这个文件的内容(也就是你输入的git commit -m "xxx"中的xxx),然后按配置规则校验。
- 在 Git 钩子场景中(通常是
完整使用场景(关键!)
这个命令几乎不会手动执行,而是配置在 Git 的 commit-msg 钩子中,实现「提交前自动校验」:
- 你执行
git commit -m "新增功能"(不符合规范); - Git 触发
commit-msg钩子,自动调用该命令,将你的提交信息传入commitlint; commitlint校验失败,输出错误(比如提示「缺少合法的 type」),并终止提交;- 你必须修改提交信息为符合规范的格式(如
feat: 新增用户列表查询功能),才能提交成功。
依赖条件
要让这个命令生效,项目中必须:
- 安装
commitlint(局部依赖):npm install commitlint --save-dev; - 配置校验规则(比如用 Angular 规范):
- 安装规则包:
npm install @commitlint/config-conventional --save-dev; - 新建配置文件(如
.commitlintrc.js),指定规则:js
module.exports = { extends: ['@commitlint/config-conventional'] // 启用 Conventional Commits 规范 };
- 安装规则包:
- 配置 Git 钩子(通常用
husky工具),将该命令绑定到commit-msg钩子。
总结
这个命令的本质是:通过 npx 执行项目局部的 commitlint 工具,读取 Git 提交信息的临时文件,校验其是否符合配置规则,从而强制规范提交信息。核心目的是让团队的 Git 提交记录清晰、统一,便于后续代码审查、版本发布和 CHANGELOG 自动生成。
更多推荐


所有评论(0)