当前位置:   article > 正文

Git Commit Message校验踩坑指南_git 校验提交的commit message

git 校验提交的commit message

背景

在团队多人开发中,规范的commit message可以快速定位代码提交历史,回溯问题根源,方便组内多人协作,提高团队效率。

本篇文章主要包含以下两方面内容:

  1. commitizen/cz-cli工具安装和使用
  2. git commit -m 提交message校验

1. commitizen/cz-cli

commitizen/cz-cli可以替代git commit -m生成符合规范的commit message

  • 全局安装commitizen
$ npm install -g commitizen

cz-conventional-changelog 是一个commitizen的 adapter(适配器),一个符合 Angular 团队规范的 preset(按照我们指定的规范帮助我们生成 commit message)

在项目根目录中运行以下命令进行安装

$ commitizen init cz-conventional-changelog --save --save-exact

配置 package.json

  1. "config": {
  2. "commitizen": {
  3. "path": "./node_modules/cz-conventional-changelog"
  4. }
  5. }

commitizen还可以支持自定义adapter,具体参考:

伯艺:如何配置 Git Commit Message​zhuanlan.zhihu.com

至此就可以使用git cz替代git commit 进行代码提交,前提是有代码在暂存区等待commit

2. git commit -m 提交message校验

虽然git cz可以方便地进行git commit代码提交,但是不能过滤掉不规范的git commit -m 提交message,接下来讲解怎么进行message校验

  • 校验 commit
    • @commitlint/cli 【命令行工具】
    • @commitlint/config-conventional 【校验规则】符合 Angular团队规范(不同于代码规范),当然还有其它规范。
$ npm i @commitlint/config-conventional @commitlint/cli -D  

package.json 配置

  1. "commitlint": {
  2. "extends": [
  3. "@commitlint/config-conventional"
  4. ]
  5. }

或者在项目根目录下创建配置文件: .commitlintrc.js

  1. module.exports = {
  2. extends: ['@commitlint/config-conventional']
  3. }
  • 安装Husky

由于 git 提供了hook机制,所以我们可以通过 git hook 在 pre-commit 进行 eslint,在 commit-msg 阶段进行 commit message lint。

$ npm i husky -D 

配置 package.json

  1. "husky": {
  2. "hooks": {
  3. "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"
  4. }
  5. }

或者在项目根目录下创建配置文件:.huskyrc

  1. {
  2. "hooks": {
  3. "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"
  4. }
  5. }

package.json完整配置:

  1. {
  2. "devDependencies": {
  3. "@commitlint/cli": "^12.1.4",
  4. "@commitlint/config-conventional": "^12.1.4",
  5. "cz-conventional-changelog": "^3.3.0",
  6. "husky": "^7.0.1"
  7. },
  8. "config": {
  9. "commitizen": {
  10. "path": "./node_modules/cz-conventional-changelog"
  11. }
  12. },
  13. "husky": {
  14. "hooks": {
  15. "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"
  16. }
  17. }
  18. }
  • 踩坑指南

此处有个巨坑,安装Husky之后并没有像网上说的那样在项目根目录下生成.git/hooks文件夹,运行git commit -m之后报错Command "husky-run" not found。

这是因为对于新版本husky(>= 6.0.0)已经做了变更,之前设置的方式已经失效了,而我项目中安装的默认是最新版本7.0.1

husky为什么会放弃之前的配置方式呢?

根据官方的说法,之前husky的工作方式是为了能够让用户设置任何类型的git hooks都能正常工作,所以在安装的时候就创建了所有类型的git hooks。这样在git 工作的每个阶段都会调用husky所设置的脚本,在这个脚本中husky会检查用户是否配置该hook,如果有就运行用户配置的命令,如果没有就继续往下执行。

这样做的好处就是无论用户设置什么类型的git hook husky都能确保其正常运行。但是缺点也是显而易见的,即使用户没有设置任何git hook,husky也向git中添加了所有类型的git hook。

新版的husky工作原理

新版的husky使用了从git 2.9开始引入的一个新功能core.hooksPath。core.hooksPath可以让你指定git hooks所在的目录而不是使用默认的.git/hooks/。这样husky可以使用husky install将git hooks的目录指定为.husky/,然后使用husky add命令向.husky/中添加hook。通过这种方式我们就可以只添加我们需要的git hook,而且所有的脚本都保存在了一个地方(.husky/目录下)

因此对于新版本husky还需要执行以下命令,在项目根目录下生成.husky文件夹

$ npx husky install 

使用以下命令在.husky文件夹中创建commit-message hook校验执行脚本

$ npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'  
  • 验证

当输入普通的commit message时

git commit -m "commit message rule check" 

则会报错


需要使用git cz或者改为以下合规message才可以提交

git commit -m "feat: commit message rule check"

参考文档:

niexia:如何配置 git 提交规范

伯艺:如何配置 Git Commit Message

偏僻摩纳哥:husky使用总结

Command "husky-run" not found. · Issue #854 · typicode/husky

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/636789
推荐阅读
相关标签
  

闽ICP备14008679号