Git Hooks

Git 钩子(Git Hooks)介绍

概述

Git 钩子是在 Git 仓库中特定事件发生时自动运行的脚本,分为客户端钩子服务器端钩子。它们位于 .git/hooks 目录下,默认以 .sample 结尾的示例文件需要重命名(去掉 .sample)才能生效。

钩子类型

客户端钩子

1. 提交工作流钩子
  • prepare-commit-msg:在默认提交信息创建后、编辑器打开前运行
  • post-commit:在提交完成后运行,用于通知等操作

commit-msg:在用户输入提交信息后运行,用于验证提交信息格式

# 示例:要求提交信息符合规范if!grep -qE "^(feat|fix|docs|style|refactor|test|chore): ""$1";thenecho"提交信息必须符合规范:<类型>: <描述>"exit1fi

pre-commit:在提交消息输入前运行,用于检查代码风格、运行测试等

# 示例:检查是否有调试语句ifgitdiff --cached |grep -q "console.log";thenecho"发现 console.log 语句,请检查!"exit1fi
2. 电子邮件工作流钩子
  • 应用于 git am 命令的补丁应用流程
3. 其他客户端钩子
  • pre-rebase:变基前运行
  • post-merge:合并后运行

pre-push:推送到远程前运行

# 示例:推送前运行测试npmtestif[$? -ne 0];thenecho"测试失败,推送中止"exit1fi

服务器端钩子

  • pre-receive:处理来自客户端的推送时最先运行
  • update:每个分支推送时运行
  • post-receive:推送完成后运行,可用于CI/CD、通知等

实际应用示例

1. 自动检查代码质量

#!/bin/bash# .git/hooks/pre-commit# 运行 ESLint npx eslint --fix --ext .js,.jsx,.ts,.tsx src/ # 如果 ESLint 失败则阻止提交if[$? -ne 0];thenecho"ESLint 检查失败,请修复错误后再提交"exit1fi

2. 提交信息规范化

#!/bin/bash# .git/hooks/commit-msg# 检查提交信息格式if!grep -qE "^(feat|fix|docs|style|refactor|test|chore|perf|build|ci|revert)(\(.+\))?: .{1,50}""$1";thenecho"错误:提交信息格式不正确!"echo"格式:<类型>(<范围>): <主题>"echo"类型:feat, fix, docs, style, refactor, test, chore等"echo"示例:feat(auth): 添加用户登录功能"exit1fi

3. 防止提交敏感信息

#!/bin/bash# .git/hooks/pre-commit# 检查是否包含敏感信息ifgitdiff --cached --name-only |xargsgrep -n "password\|secret\|token";thenecho"发现可能包含敏感信息的文件,请检查!"exit1fi

管理钩子的最佳实践

1. 版本控制钩子

由于 .git/hooks 不在版本控制中,可以:

  • 在项目中创建 scripts/hooks 目录存放钩子
  • 使用符号链接或安装脚本
  • 使用 Husky(Node.js 项目)等工具管理

2. 使用 Husky(推荐用于 Node.js 项目)

# 安装npminstall 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"'

3. 跨平台兼容性

  • 注意脚本的换行符(LF vs CRLF)
  • 避免平台特定的命令
  • 使用解释器声明(#!/bin/bash

注意事项

  1. 性能影响:钩子中的操作应尽量快速
  2. 错误处理:非零退出码会中止操作
  3. 用户友好:提供清晰的错误信息
  4. 可跳过:使用 git commit --no-verify 可跳过钩子检查

常见工具

  • Husky:现代化的 Git 钩子管理工具
  • lint-staged:只对暂存文件运行检查
  • commitlint:提交信息规范检查
  • pre-commit:Python 项目的钩子框架

Git 钩子是自动化开发工作流的重要工具,合理使用可以显著提升代码质量和团队协作效率。

Read more

Django REST framework企业级API架构实战

Django REST framework企业级API架构实战

目录 摘要 1. 🎯 开篇:从踩坑到架构 2. 🏗️ 核心原理深度解析 2.1 DRF架构设计哲学 2.2 视图集:CRUD的终极抽象 2.3 序列化器:不只是数据转换 3. 🔧 实战:完整API实现 3.1 用户管理API 3.2 分页、过滤、排序 3.3 节流与限流 4. 🔥 高级实战:企业级API 4.1 缓存优化策略 4.2 性能监控中间件 4.3 API版本管理 5. 🚀 性能优化指南 5.1 数据库优化 5.

By Ne0inhk
GitHub开源项目日报 · 2026年2月25日 · 本期榜单AI代理与爬虫热潮

GitHub开源项目日报 · 2026年2月25日 · 本期榜单AI代理与爬虫热潮

本期榜单主要项目覆盖网页抓取、AI代理技能、代码知识图谱、上下文工程、内存框架、向量数据库与大模型训练等方向。 Scrapling 提供自适应爬虫与多会话并发,Hugging Face Skills 提供标准化代理技能集合,GitNexus 本地运行的代码知识图谱,Superpowers 基于技能的端到端代理工作流,Hello-Agents 与 DeerFlow 展示多智能体协作与执行能力,PageIndex 推理式 RAG、memU 24/7 内存框架、RuVector 本地向量数据库与图推理,以及 Megatron-LM 的 GPU 优化训练工具。 其中每天增长超过100星以上的项目包含 Hello-Agents 与 Superpowers。 根据Github Trendings的统计,共有以下项目上榜: 排名项目名称项目语言1Scrapling:适应性网页抓取框架,覆盖从单次请求到全量爬虫 (D4Vinci/Scrapling)Python2Hugging Face Skills:AI代理技能集合

By Ne0inhk
Python入门:Python3爬虫BeautifulSoup全面学习教程

Python入门:Python3爬虫BeautifulSoup全面学习教程

Python入门:Python3爬虫BeautifulSoup全面学习教程 Python入门:Python3爬虫BeautifulSoup全面学习教程,该教程围绕 Python 爬虫核心工具 BeautifulSoup4(BS4)展开,先介绍爬虫 “发送 HTTP 请求、解析内容、提取数据、存储数据” 的核心流程,点明 BS4 在解析 HTML/XML 中的优势 ——API 简单、支持多解析器、功能全面。接着讲解环境搭建,需通过 pip 安装 beautifulsoup4 与 lxml 解析器,再以实例演示基础用法:用 requests 获取网页 HTML,创建 BS 对象,提取网页标题;深入介绍标签查找(find ()/find_all ())、属性筛选(

By Ne0inhk
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构

Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构 前言 在鸿蒙(OpenHarmony)生态迈向专业化工具链、涉及海量日志审计、在线编程教育及开发者社区分发的背景下,如何为长篇累牍的源代码实现毫秒级的语法高亮与结构化展示,已成为决定用户阅读体验与知识传递效率的“视觉分水岭”。在鸿蒙设备这类强调 AOT 极致性能与复杂文本排版(Text Layout)的环境下,如果应用依然依赖基础的正则表达式进行低效的字符匹配,由于由于解析算法的复杂性,极易由于由于“主线程阻塞”导致大型文件在滑动过程中产生严重的掉帧与视觉黏连。 我们需要一种能够支持多语言语法解析、具备词法分析(Lexing)深度且兼容 RichText 富文本输出的高性能染色方案。 highlighter 为 Flutter 开发者引入了基于标准词法字典的语法高亮引擎。它不仅能精准识别不同编程语言的关键字、操作符与注释,更利

By Ne0inhk