Git 钩子(Git Hooks)是 Git 提供的一种在特定 Git 操作发生时自动执行脚本的机制,常用于代码检查、自动格式化、提交规范校验、自动部署等。
下面从 是什么 → 在哪 → 怎么用 → 常见示例 给你讲清楚。
Git 钩子是放在 .git/hooks/ 目录下的可执行脚本文件,在 Git 执行某些动作(如 commit、push)前后自动触发。
常见钩子类型:
pre-commit:提交前执行(最常用)commit-msg:校验提交信息pre-push:推送前执行post-merge:合并后执行每个 Git 仓库都有:
.git/hooks/
里面默认有一些 .sample 示例文件,如:
pre-commit.sample
commit-msg.sample
注意:
.git 不在版本控制中)touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
#!/bin/sh
echo "开始代码检查..."
# 假设用 eslint
npm run lint
if [ $? -ne 0 ]; then
echo "代码检查未通过,禁止提交"
exit 1
fi
git commit -m "test"
如果 lint 失败,提交会被拦截。
#!/bin/sh
MSG=$(cat "$1")
if ! echo "$MSG" | grep -Eq "^(feat|fix|docs|style|refactor|test|chore):"; then
echo "提交信息不符合规范"
exit 1
fi
#!/bin/sh
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$BRANCH" = "main" ]; then
echo "不能直接 push 到 main"
exit 1
fi
手写钩子维护成本高,推荐用工具:
npm install husky -D
npx husky init
生成:
.husky/pre-commit
内容示例:
npm run lint
npx lint-staged
由于 .git/hooks 不共享,常见方案:
core.hooksPath 指定共享目录git config core.hooksPath .githooks
chmod +xGIT_TRACE=1 git commit
如果你愿意,可以告诉我:
我可以直接给你一套可用的钩子配置。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。