Git Commit格式校验

Git 规范

Git 作为现在最流行的分布式管理工具,基本上是每个团队的必备。

Git Commit格式校验

  • 准备commitlint/cli用于格式校验
  • 准备husky用于git提交代码时触发校验

husky

husky 是创建 git 客户端 hooks 的神器。

目前最新版本是 7.*,文档在这里(opens new window)

初始化 husky 只需要三步。首先要安装:

$ npm i husky --save-dev
复制代码

执行下面的脚本,会初始化一个 .husky 目录:

$ npx husky install
复制代码

初始化后,就可以添加 hook 了。

添加一个 commit-msg 钩子,并指定一个默认 shell:

$ npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
复制代码

现在在执行 git commit 之前,就会执行上面指定的 shell。

commitlint

上面的 shell 里有一个 commitlint 命令,其实它是另一个工具,用来校验 commit 提交信息,这是 husky + commitlint 这对黄金搭档的主要功能。

commitlint 的文档在这里(opens new window)

为了直观的看出 commit 的更新内容,开发者社区诞生了一种规范,将 commit 按照功能划分,加一些固定前缀,比如 fix:feat:,用来标记这个 commit 主要做了什么事情。

扫描二维码关注公众号,回复: 14508959 查看本文章

commitlint 命令就是校验 commit 信息是否符合上述规范,不符合,则会配合 husky 阻止提交。

首先安装 commitlint:

$ npm i @commitlint/{config-conventional,cli} --save-dev
复制代码

然后创建配置文件:

echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
复制代码

这样就好了,然后我们随便改一处代码,试试效果:

$ git add .
$ git commit -m 'test'
复制代码

因为 “test” 不符合 commit 规范,所以被阻止了,执行结果如下:

我们再试一下符合规范的提交格式:

$ git commit -m 'fix: 修复**功能'
复制代码

这样就可以通过了!

commit前缀

目前主流的前缀包括以下部分:

  • build:表示构建,发布版本可用这个
  • ci:更新 CI/CD 等自动化配置
  • chore:杂项,其他更改
  • docs:更新文档
  • feat:常用,表示新增功能
  • fix:常用:表示修复 bug
  • perf:性能优化
  • refactor:重构
  • revert:代码回滚
  • style:样式更改
  • test:单元测试更改

当你的项目中出现如上图的commit log,你会有什么感受?乱(强迫症看着是真难受)

格式不统一,type、scope没有合理使用,空格使用不规范等等,让我们无法在短暂的时间内从commit log中看到有用的信息。

这时,我们在团队内,提出一个commit message规范issue-id type(scope): 描述内容,让大家提交时遵守这个规范。

但是我们仅仅通过人为去遵守,总是不可靠,可能多一个空格少一个空格,也看不出来。

互联网时代,就交给代码去做吧!

清晰易懂、格式统一之后的commit log,请看下图:

此文就给大家介绍一个npm包husky-hook,告别繁琐的安装和脚本开发等,只需安装即可开启校验。

husky-hook

github地址:github.com/anyblue/hus…

npm地址:www.npmjs.com/package/hus…

husky + .git/hooks/commit-msg的结合

介绍

  1. 基于husky(版本7.x)
  2. 增加校验commit message的脚本
  3. git commit时运行.husky/commit-msg钩子
  4. 校验成功之后,执行.git/hooks目录下的默认commit-msg钩子

安装

以NPM安装为例:

安装

npm install husky-hook --save-dev
复制代码

开启校验

命令行运行下述命令,生成.husky目录和校验脚本:

npx husky-hook install
复制代码

install后自动开启校验,请执行下方命令:

npm set-script prepare "husky-hook install"
复制代码

操作完成后,你将会在项目根目录看到如下目录和文件:

使用

安装成功后,我们就可以通过git commit -m 'xxx'提交代码了。

校验不通过

将会出现如下提示:

校验通过

如果你不需要运行.git/hooks/commit-msg钩子,出现如下提示:

则修改.husky/commit-msg中的exit 1exit 0

重新git commit -m 'xxx',即可通过校验,commit成功。

卸载

不需要时,可以按照下述命令操作,进行卸载:

npx husky-hook uninstall

npm uninstall husky-hook
复制代码

遇到的问题

  1. 如何在使用husky的同时,使用.git/hooks默认钩子

husky生成的钩子存储在.husky目录下,并且更改了.git/confighooksPath = .husky,也就是说,使用了husky来处理gitHooks,那就只能执行.husky目录下的钩子脚本,执行不了.git/hooks下的脚本。

.husky/commit-msg中手动去执行.git/hooks中的脚本,如下:

......

if [ -e .git/hooks/commit-msg ]; then
    . .git/hooks/commit-msg
else
    # Install custom hooks, such as using Gerrit to generate change ID
    echo '\033[31m Please check and install .git/hooks/commit-msg hooks \033[0m'
    exit 0
fi
复制代码
  1. husky 5.x 以上版本与gerrit生成评审id(.git/hooks/commit-msg用gerrit来生成评审id)冲突

冲突在于获取get config get gerrit.reviewUrl时,没有设置的话,出现异常退出了。

可以通过以下脚本设置gerrit.reviewUrl为空,前提是这个值本身应该为''

git config --local gerrit.reviewUrl ''
复制代码

结语

简洁清晰易懂的commit message对于项目开发来说,至关重要。

快快用起来吧!看谁还敢不好好写commit message

猜你喜欢

转载自blog.csdn.net/sinat_17775997/article/details/124458029