POST
Git hook 配置与使用
Hook 就是在执行某个事件之前或之后进行一些其他额外的操作。在 Git 中也有许多的事件(commit、push 等等),每个事件也是对应了有不同的钩子的(如 commit 前,commit 后),那么我们就可以在这些钩子这里配置一些自己需要执行的操作来实现各种各样的需求。
Git Hooks 介绍
Git Hooks 的实现其实非常简单,就是就 .git/hooks
文件下,保存了一些 shell 脚本,然后在对应的钩子中执行这些脚本就行了。比如下图中,这是一个还没有配置 Git Hooks 的仓库,默认会有很多 .sample
结尾的文件,这些都是示例文件。
我们打开 pre-commit.sample
文件看一下其中的内容,大致意思是说这是一个示例,做了一些格式方面的检测,这个脚本默认是不生效的,如果要生效,把文件名改为 pre-commit
即可。
pre-commit
这个钩子是在 git commit
命令执行之前触发。
Git 支持的所有钩子见下表(加粗的为常用钩子):
PS:完整钩子说明,请参考 @官网链接
Husky 配置
从上面的介绍中,我们知道 Git Hook 保存在 .git
文件夹中。不知你有没有发现这会有一个问题?可能细心的同学已经知道了,Git 是一个多人协作工具,那按理说 Git 仓库中的所有文件都应该被跟踪并且上传至远程仓库的。但是有个例外,.git
文件夹不会,这就导致一个问题,我们在本地配置好 Git Hook 后,怎么分享给其他小伙伴儿呢?copy 吗?那未免太 low 了,都用 Git 了,还 copy,也太不优雅了。这时候,就轮到 Husky 出场了。
Husky 是一个让配置 Git 钩子变得更简单的工具(题外话:Husky 是哈士奇的意思,我猜可能是作者养了条二哈)
下面这些流行的项目都在使用 Husky,可见它确实是一个非常好用的工具:
–no-verify 的使用
git commit --amend --no-verify
命令是一条 Git 命令,它允许你修改最近的提交信息或内容,而不触发 pre-commit
和 commit-msg
钩子。git commit --amend
命令与此类似,但它会在钩子存在的情况下运行这些钩子。这两个命令都会用包含你的修改的新提交来替换之前的提交。