git hooks

简介: 如同 flask 框架的请求钩子一样,git 也有钩子 (hook) 的概念,下面就让我们一起来看看吧。

1.概念

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

2.分类

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

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

3.原理

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

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

╰─❯ ls # cd .git/hooks
applypatch-msg.sample     fsmonitor-watchman.sample preapplypatch.sample     pre-push.sample           pre-receive.sample        update.sample
commit-msg.sample         post-update.sample        pre-commit.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/sh
echo 'this is pre-commit hook'

3.激活钩子


mv pre-commit.sample pre-commit

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

# ... do something
git 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 控制之外的文件是否存在,这样你就能在工作区改变时,把这些文件复制进来。

相关文章
|
6月前
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
98 0
|
前端开发 开发工具 git
一个 git 仓库下拥有多个项目的 git hooks 配置方案
一个 git 仓库下拥有多个项目的 git hooks 配置方案
202 0
|
前端开发 JavaScript Shell
手写 git hooks 脚本(pre-commit、commit-msg)
手写 git hooks 脚本(pre-commit、commit-msg)
488 0
|
Devops 测试技术 开发工具
devops| git hooks 实战: 防分支 merge
基于工作中 git 工作流遇到的问题, 实战 git hooks, 防止测试分支合并到开发分支
588 0
|
缓存 前端开发 JavaScript
CI 从Git hooks学起
前端工程化 前端工程化是前端的一个重要领域,简单的从代码规范开始,复杂的到团队脚手架搭建。在小团队中大多由开发兼任,在大团队中则可能有专门的基建团队负责。可见工程化的普及度是非常高的,只是不同团队的水平或复杂度参差不齐。 工程化对于前端开发是个必备技能。不说要学的多深多厉害,起码能 hold 住一个普通项目。我们先从 Git 的 hooks 学起,这是很多自动化的关键。
|
IDE Shell 开发工具
在 Swift 中编写脚本:Git Hooks
这周,我决定完成因为工作而推迟了一周的 TODO 事项来改进我的 Git 工作流程。
192 1
在 Swift 中编写脚本:Git Hooks
|
Shell 开发工具 git
使用 Git Hooks 实现自动项目部署
最近在某服务器上面搭建 git 开发和部署环境,git 开发环境很简单,按照 ProGit 一书的相关知识就可以轻松搞定,实现了类似 Github 的使用 SSH + 私有 Clone 的方式。 关于部署,实际上是自动部署,起初的想法是使用 bash shell 制定一个定时任务去不断 git pull 产品代码,后来记得 Git 带有 Hooks,索性在ProGit 一书翻了翻: Git 本身可以调用自定义的挂钩脚本,其中有两组:客户端和服务器端。
1473 0
|
13天前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
35 1
[Git]入门及其常用命令
|
1月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
107 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
17天前
|
开发工具 git 开发者