如何利用 Git Hooks 来解决 “不会还有用 qq 邮箱来提交公司代码吧” 痛点
如何利用 Git Hooks 来解决 “不会还有用 qq 邮箱来提交公司代码吧” 痛点
没错!那个人就是我(●’◡’●)
不知道有没有人试过,不小心用 Github 的账号,提交 commit 到公司代码仓库中去,那一天突然兴致跑去看提交历史,会有个莫名其妙的东西混进来。这谁谁谁的代码吖,定睛一看,好像是我自己的 🫣,但又双为时已晚了。
01 Git Hooks
从字面意思,大家应该都能像到是用来做什么的了。对对对,就是脑海中想像那个字眼,git 钩子。它的实现非常简单,Git 能在特定的重要动作发生时触发自定义脚本,其中比较常用的有:pre-commit
、commit-msg
、pre-push
等钩子(hooks)。用于编写 git hooks 的脚本语言是没有限制的,你可以用 nodejs
、shell
、python
、ruby
等脚本语言,非常的灵活方便。
我们新建一个文件夹,git init
初始化仓库,进入 .git/hooks 文件夹,可以看到各种各样 sample 结尾的文件。
打开其中一个看看,这些 sample 文件只是样板文件,简单来说,就是打个样。类似这个 pre-commit.sample 文件,从它注释来看,意思说给你打个样看好了,就是说,当提交 git commit 不带参数,可以通过 exit 非零来停止 commit 。说明你可以在这里编写一些校验判断在 commit 之前,类似邮箱校验,代码样式校验都可以在这里实现。通过重命名 pre-commit.sample ====> pre-commit 投入使用。
至于每个钩子的作用,可以参照下面搬运过来的表
PS:完整钩子说明,请参考官网链接
02 解决痛点
为了解决上述痛点,我们分析可得,在 pre-commit 或 common-msg 来进行校验邮箱号,这边以 pre-commit 为例,编写下面的代码,删除最后 sample 结尾。
1 |
|
检验成果的时候到了!我们新建一个 a.js 文件并提交到暂存区,当输入 git commit -m "add a.js"
命令,哇哦,我们成功了!!!🤪
同时还善意提醒我们可以通过下面两条命令修改项目仓库中的用户名和邮箱号。
03 Husky
上面介绍了如何使用 Git hooks 钩子,但是这个钩子只能我们本地使用,如何礼貌让一起开发的同学一起规范起来呢,难不成,诶诶那个谁,你那个钩子 copy 我一份嘞,都是用 git 的人了,应该优雅点。下面我们介绍 [Husky](Husky - Git hooks (typicode.github.io)) 这个库。帮助我们管理 Git Hooks
官方提供两种方式安装
那我我们就按照,官方推荐自动的方式
1 |
|
运行完命令后,会同时修改 package.json 和 生成一个简单的例子 pre-commit
hook
也可以,通过生成 commit-msg 和其他的钩子
1 |
|
见证奇迹
接下来,我们将我们上面写好的邮箱校验放入生成好的 pre-commit 文件中
可以看到,校验成功了。我们再试试 commit-msg
1 |
|
输入完命令后,生成 .husky/commit-msg 文件,我们可以利用这个文件校验 commit 提交的备注
1 |
|
输入 git commit -m "add pre-commit"
命令(同时也修改邮箱配置,以便通过 pre-commit)
**This’s the magic!!!**😮
再也不用担心我提交乱七八糟的 commit 了,最后我们在校验下,git commit -m "feat: add pre-commit"
(老老实实备注)
显然,提交成功啦!
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!