git hooks详解

/ 0评 / 0

简介

在每一个使用 git 进行版本管理的仓库,都有一个目录 .git/hooks,包含 commit 各个阶段 Hooks 的脚本。这些 Hooks 在 git 操作 commit、push、merge 等得时候,可以做前置或者后置的操作。Git 支持的常用钩子见下表,更多请查看官网Hooks:

Git Hook 调用时机 调用时机
pre-commit git commit 执行前 可以用 git commit --no-verify 绕过
commit-msg git commit 执行前 可以用 git commit --no-verify 绕过
pre-merge-commit git merge 执行前 可以用 git merge --no-verify 绕过
pre-push git push 执行前

当git执行hooks的时候,会将工作目录设置成项目的跟目录。

配置hooks

在 git 项目中,.git/hooks下面有很多 hooks 示例如下

这些 git hooks 都是.sample结尾的,如果要启用某个 hooks 用可以去掉.sample结尾

自定义hooks路径

针对单一的工程

git config core.hooksPath "C:\Users\Desktop\hooks_dir\"

当然也可以直接全局设置

git config --global core.hooksPath "C:\Users\Desktop\hooks_dir\"

core.hooksPath的优先级比 .git/hooks下的高

hooks文件编写

1、要想拦截某次提交,我们直接让hooks的返回码非0即可

#!/bin/sh

echo "这个消息会显示,然后提交失败"
exit 1

2、获取传递的参数

#!/bin/sh

echo "你的输入为:" $(cat $1)
exit 1

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注