git hooks

全栈技术精选

共 3073字,需浏览 7分钟

 · 2020-09-06

小闫辛苦码了 1358 个字 

文章可能占用您 4 分钟 

欢迎关注「全栈技术精选」

今日分享:Ask yourself, who do you want to be? Figure out for yourself what makes you happy, no matter how crazy it may sound to other people.

如同 flask 框架的请求钩子一样,git 也有钩子 (hook) 的概念,下面就让我们一起来看看吧。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

1.概念

执行某些命令前后,统一进行的操作。比如我要在每次 commit 前核查代码,就可以使用钩子 pre-commit

2.分类

1.客户端钩子:提交或者合并时,在客户端进行的操作。

2.服务端钩子:接收推送时,在服务器端进行的操作。

3.原理

这些钩子本质上是一些脚本,在执行特定命令时调用这些脚本以达到目的。更多精彩文章请关注公众号『Pythonnote』

大家可以在任意一个 git 管理的仓库下 .git/hooks 目录中找到官方示例。

╰─❯ ls # cd .git/hooksapplypatch-msg.sample     fsmonitor-watchman.sample preapplypatch.sample     pre-push.sample           pre-receive.sample        update.samplecommit-msg.sample         post-update.sample        pre-commit.sample         pre-rebase.sample         prepare-commit-msg.sample

当你查看这些示例时,会发现他们其实就是一些 shell 脚本,也会包含一些其他语言的代码,如 perl

语言不限定,甚至可以使用 Python 编写它们。

4.使用

如果想体验一下官方示例,可以将官方示例的钩子脚本后缀名删掉,这样它就被激活了。

mv pre-commit.sample pre-commit

4.1 示例

我希望在每次 commit 前输出一句话:

this is pre-commit hook

步骤:

1.将官方示例进行备份

cp pre-commit.sample pre-commit.sample.bak

2.修改 pre-commit 钩子脚本

vim pre-commit.sample
#!/bin/shecho 'this is pre-commit hook'

3.激活钩子更多精彩文章请关注公众号『全栈技术精选』

mv pre-commit.sample pre-commit

4.在仓库做一些改变然后进行提交

# ... do somethinggit add .git commit -m 'test hooks'

5.输出信息如下

从图中可以看到执行了我们的脚本。

5.客户端常用的 hooks

5.1 pre-commit

在执行 git commit 键入提交信息前运行,如果脚本输出非零值,那么就会停止提交。关注公众号『全栈技术精选』

用途:做初步的 code review ,检查代码风格是否符合规范;检查代码是否有多余空白字符等等。

5.2 post-commit

在整个提交过程完成后运行。

用途:提示信息。

5.3 pre-push

在 git push 运行期间, 更新了远程引用但尚未传送对象时被调用。它接受远程分支的名字和位置作为参数,同时从标准输入中读取一系列待更新的引用。如果脚本输出非零值,那么就会停止推送。关注公众号『Pythonnote』或者『全栈技术精选』

用途:在推送开始之前,用它验证对引用的更新操作。

5.4 post-merge

在 git merge 成功运行后,post-merge 钩子会被调用。

用途:可以用它恢复 Git 无法跟踪的工作区数据,比如权限数据。这个钩子也可以用来验证某些在 Git 控制之外的文件是否存在,这样你就能在工作区改变时,把这些文件复制进来。







排版:小闫

图片素材:小闫

文案:小闫

长按扫描下方二维码即刻关注小闫




浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报