Git 钩子(Git Hooks)介绍
概述
Git 钩子是在 Git 仓库中特定事件发生时自动运行的脚本,分为客户端钩子和服务器端钩子。它们位于 .git/hooks 目录下,默认以 .sample 结尾的示例文件需要重命名(去掉 .sample)才能生效。
钩子类型
客户端钩子
1. 提交工作流钩子
- prepare-commit-msg:在默认提交信息创建后、编辑器打开前运行
Git Hooks 的概念、分类(客户端与服务器端)及常用钩子类型。通过实际代码示例展示了如何编写脚本进行代码质量检查、提交信息规范化及敏感信息防护。同时提供了管理钩子的最佳实践,包括版本控制方案及推荐工具 Husky 的使用,旨在帮助开发者提升代码质量和团队协作效率。
Git 钩子是在 Git 仓库中特定事件发生时自动运行的脚本,分为客户端钩子和服务器端钩子。它们位于 .git/hooks 目录下,默认以 .sample 结尾的示例文件需要重命名(去掉 .sample)才能生效。
commit-msg:在用户输入提交信息后运行,用于验证提交信息格式
# 示例:要求提交信息符合规范
if ! grep -qE "^(feat|fix|docs|style|refactor|test|chore): " "$1"; then
echo "提交信息必须符合规范:<类型>: <描述>"
exit 1
fi
pre-commit:在提交消息输入前运行,用于检查代码风格、运行测试等
# 示例:检查是否有调试语句
if git diff --cached | grep -q "console.log"; then
echo "发现 console.log 语句,请检查!"
exit 1
fi
git am 命令的补丁应用流程pre-push:推送到远程前运行
# 示例:推送前运行测试
npm test
if [ $? -ne 0 ]; then
echo "测试失败,推送中止"
exit 1
fi
#!/bin/bash
# .git/hooks/pre-commit
# 运行 ESLint
npx eslint --fix --ext .js,.jsx,.ts,.tsx src/
# 如果 ESLint 失败则阻止提交
if [ $? -ne 0 ]; then
echo "ESLint 检查失败,请修复错误后再提交"
exit 1
fi
#!/bin/bash
# .git/hooks/commit-msg
# 检查提交信息格式
if ! grep -qE "^(feat|fix|docs|style|refactor|test|chore|perf|build|ci|revert)(\(.+\))?: .{1,50}" "$1"; then
echo "错误:提交信息格式不正确!"
echo "格式:<类型>(<范围>): <主题>"
echo "类型:feat, fix, docs, style, refactor, test, chore 等"
echo "示例:feat(auth): 添加用户登录功能"
exit 1
fi
#!/bin/bash
# .git/hooks/pre-commit
# 检查是否包含敏感信息
if git diff --cached --name-only | xargs grep -n "password\|secret\|token"; then
echo "发现可能包含敏感信息的文件,请检查!"
exit 1
fi
由于 .git/hooks 不在版本控制中,可以:
scripts/hooks 目录存放钩子# 安装
npm install husky --save-dev
# 初始化
npx husky install
# 添加钩子
npx husky add .husky/pre-commit "npm test"
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
#!/bin/bash)git commit --no-verify 可跳过钩子检查Git 钩子是自动化开发工作流的重要工具,合理使用可以显著提升代码质量和团队协作效率。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online