Commitizen + Husky + Commitlint实现commit message校验

本文介绍了如何结合Commitizen, Husky和Commitlint来实现commit message的自动校验,包括安装步骤、配置过程以及如何定制个人化的校验规范,确保提交信息的标准化。" 134824784,783471,华为OD机试:部门人力分配问题的JS解法,"['华为OD', '编程题目', '算法', 'JavaScript']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Commitizen, Husky, Commitlint

先简要地介绍这三个工具的作用,让大家对整个校验过程如何实现有一个大体的了解。

  • Commitizen:是一个命令行提示工具,它主要用于帮助我们更快地写出规范的commit message
  • Commitlint:用于校验填写的commit message是否符合设定的规范
  • Husky:是一个git hook工具,用于在提交过程中的某个特定时刻触发commitlint

第一步:Commitizen

安装Commitizen有全局安装和单个项目安装两种方式,在此我们推荐全局安装,以下是安装过程。

首先,全局安装Commitizen:

npm install -g commitizen 

然后,全局安装Commitizen的适配器,一般是cz-conventional-changelog

npm install -g cz-conventional-changelog 

适配器的作用是按照某个指定的规范帮助我们生成commit message。cz-conventional-changelog预设的是Angular团队规范。你也可以选择其他的适配器来切换不同的规范,甚至自定义一个适配器。

如果你是mac用户,请运行下面这条命令,它会在你的home目录下,创建一个.czrc文件。路径指向刚才全局安装的适配器。

echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc 

如果你是windows用户,请把下面这条命令中的C:\Users\12105更换成你自己电脑上的\Users\username目录再运行。这条命令的本质其实就是在Users\username

### 解决方案 当 `git commit` 的 `commitlint` 校验失败时,通常是因为提交消息不符合预定义的规则。以下是针对 `subject` 和 `type` 不能为空的问题的具体解决方案: #### 配置文件调整 确保项目的 `.commitlintrc.json` 文件中已正确定义了校验规则。如果未设置或设置了过于严格的规则,可能会导致校验失败。以下是一个典型的配置示例[^4]: ```json { "extends": ["@commitlint/config-conventional"], "rules": { "header-max-length": [2, "always", 72], "type-empty": [2, "never"], // 禁止 type 为空 "subject-empty": [2, "never"] // 禁止 subject 为空 } } ``` 上述配置中的 `"type-empty"` 和 `"subject-empty"` 明确指定了这两项不可为空。 --- #### 提交模板优化 为了帮助开发者遵循规范,在项目根目录下创建一个 `.git/hooks/prepare-commit-msg` 脚本文件,并赋予其可执行权限 (`chmod +x .git/hooks/prepare-commit-msg`)。脚本内容如下[^1]: ```bash #!/bin/sh exec < /dev/tty cat << EOF Please enter a valid commit message following the conventional format: <type>(<scope>): <short summary> Where: - Type can be one of: feat, fix, docs, style, refactor, test, chore. - Scope is optional but recommended (e.g., component name). - Summary should briefly describe the change. EOF ``` 此脚本会在每次运行 `git commit` 命令前提示用户按照约定格式编写提交信息。 --- #### 使用交互式提交工具 推荐使用 `husky` 结合 `commitizen` 来简化提交过程并自动满足 `commitlint` 的要求。安装相关依赖后,可以通过运行 `npm run commit` 替代传统的 `git commit` 命令: ```bash npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"' npm install --save-dev @commitlint/{config-conventional/cli} commitizen cz-customizable echo '{ "config": { "czCustomizable": { "path": "" } } }' > ./cz-config.js ``` 完成以上步骤后,执行 `npm run commit` 将引导用户逐步选择合适的 `type`, `scope`, 和描述文字等内容,从而有效避免手动输入错误的情况发生。 --- #### 自动修复与格式化 除了严格校验外,还可以引入自动化工具来辅助开发人员生成合规的消息。例如利用 Prettier 对最终形成的 JSON 数据结构进行美化处理[^3]: ```javascript const prettier = require('prettier'); const jsonContent = '{"type":"feat","scope":"","subject":"add new feature"}'; console.log(prettier.format(jsonContent, { parser: 'json' })); // 输出结果更加清晰易读 ``` 尽管此处展示的是对 JSON 字符串的操作演示,但在实际应用当中也可以扩展到其他类型的文本资源之上。 --- ### 总结 综上所述,解决 `git commit` 中 `commitlint` 校验失败的关键在于合理配置校验规则、提供友好型的提交界面以及借助外部插件增强用户体验等方面共同努力的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值