Git钩子技能Skill git-hooks

这个技能提供关于Git钩子的全面指导,帮助开发者设置和管理Git钩子,以提高代码质量、自动化测试、安全扫描和团队协作。涵盖.NET/C#、JavaScript/TypeScript、Python等多生态系统,包括框架选择、性能优化、CI/CD集成等关键词,便于SEO搜索。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

名称: git-hooks 描述: Git钩子实现的中央权威,现代最佳实践,以及针对.NET/C#、JavaScript/TypeScript、Python和多语言仓库的工具。涵盖框架选择(Husky.Net、lefthook、Husky、pre-commit)、设置工作流、Conventional Commits、语义版本控制、秘密扫描(gitleaks、TruffleHog)、性能优化、CI/CD集成、测试策略和团队协作模式。适应从独立开发者到企业团队的项目规模。用于设置git钩子、配置pre-commit/commit-msg/pre-push钩子、集成dotnet format/dotnet test、ESLint/Prettier、Black/Ruff/mypy、commitlint、选择框架、优化钩子性能、强制执行代码质量、自动化测试和故障排除钩子问题。 允许工具: Read, Bash, Glob, Grep

Git 钩子

概述

这个技能提供跨多个生态系统的现代git钩子实现的全面指导,主要关注.NET/C#,并强支持JavaScript/TypeScript和Python。它涵盖框架选择、设置工作流、性能优化、安全集成、测试策略和团队协作模式。

关键能力:

  1. 自适应框架推荐 基于生态系统、规模和要求
  2. 完整生命周期支持 从工具选择 → 设置 → 配置 → 测试 → 维护
  3. 性能优先方法 带有并行执行和增量处理模式
  4. 默认安全 带有强制秘密扫描集成
  5. CI/CD集成 用于深度防御验证(本地 + 远程)
  6. 真实世界示例 带有复制粘贴就绪的配置

何时使用此技能

当您需要时使用此技能:

  • 设置git钩子 为新项目或现有项目
  • 选择git钩子框架Husky.Net vs lefthook vs Husky vs pre-commit)
  • 配置pre-commit钩子 用于代码格式化、linting、安全扫描
  • 配置commit-msg钩子 用于Conventional Commits验证
  • 配置pre-push钩子 用于运行测试或构建验证
  • 集成生态系统工具 (dotnet format、ESLint/Prettier、Black/Ruff/mypy)
  • 强制执行Conventional Commits 使用commitlint
  • 扫描秘密 在提交前(gitleaks、TruffleHog)
  • 优化钩子性能 (慢钩子阻塞开发者)
  • 测试git钩子 (单元测试、集成测试)
  • 部署钩子到团队 (自动安装、CI/CD强制执行)
  • 故障排除钩子问题 (激活问题、性能问题)
  • 处理monorepo 钩子模式

触发场景:

  • “为我的.NET项目设置git钩子”
  • “如何在提交前强制执行代码格式化?”
  • “配置Conventional Commits验证”
  • “我的pre-commit钩子太慢”
  • “我应该为C#使用Husky.Net还是lefthook?”
  • “将秘密扫描与git钩子集成”

快速启动决策树

我应该使用哪个框架?

回答这些问题:

  1. 您的主要生态系统是什么?

    • 仅.NET/C# → 考虑 Husky.Net (原生集成)或 lefthook (性能)
    • 仅JavaScript/TypeScript → 使用 Husky + lint-staged + commitlint
    • 仅Python → 使用 pre-commit 框架
    • 多语言(polyglot) → 使用 lefthookpre-commit
  2. 您的团队规模/规模是什么?

    • 独立开发者或小团队 → 任何框架都有效;基于生态系统选择
    • 中等团队(5-20) → 优先考虑安装简便和CI/CD集成
    • 大团队/企业(20+) → 优先考虑性能(lefthook)、标准化
  3. 您的性能要求是什么?

    • 速度关键 → 使用 lefthook (并行执行、基于Go)
    • 速度中等关注 → 任何带有增量处理的框架
    • 速度不关注 → 基于生态系统熟悉度选择

快速推荐

生态系统 独立/小团队 中等团队 大团队/企业
.NET/C# Husky.Net Husky.Net 或 lefthook lefthook
JavaScript/TypeScript Husky + lint-staged Husky + lint-staged Husky + lint-staged 或 lefthook
Python pre-commit pre-commit pre-commit 或 lefthook
多语言 lefthook 或 pre-commit lefthook lefthook

框架一览比较

特征 Husky.Net lefthook Husky (JS) pre-commit
性能 中等 优秀 (并行) 好(带lint-staged)
生态系统 .NET/C# 任何 JavaScript/TS 任何 (Python主要)
配置格式 JSON (task-runner.json) YAML Shell脚本 + package.json YAML
并行执行 ❌ 否 ✅ 是 ❌ 否 部分
学习曲线 低(.NET开发者) 中等 低(JS开发者) 低(Python开发者)
Monorepo支持 中等 优秀 优秀

📖 详细比较:references/framework-comparison.md 以获取全面特征分析、优缺点和选择标准。

核心能力

1. .NET/C# 工作流

快速启动: 安装Husky.Netdotnet tool install Husky)或lefthook(scoop install lefthook),配置task-runner.json或lefthook.yml,并验证。

关键模式:

  • 使用 ${staged}{staged_files} 进行增量处理
  • 集成dotnet format(pre-commit)和dotnet test(pre-push)
  • 将Husky.Net附加到.csproj以进行自动团队安装

📖 完整设置:references/setup-workflows.md

示例:


2. JavaScript/TypeScript 工作流

快速启动: 安装依赖(npm install --save-dev husky lint-staged @commitlint/cli),初始化Husky(npx husky init),在package.json中配置lint-staged,并添加钩子。

关键模式:

  • 使用lint-staged进行增量处理(15倍速度提升)
  • 集成ESLint、Prettier和commitlint
  • 通过prepare脚本自动安装

📖 完整设置:references/setup-workflows.md

示例:


3. Python 工作流

快速启动: 安装pre-commit(pip install pre-commit),创建 .pre-commit-config.yaml 带有Black/Ruff/mypy钩子,并运行 pre-commit install

关键模式:

  • 使用Ruff进行10-100倍更快的linting比Flake8/pylint
  • 广泛的插件生态系统(数百个预构建钩子)
  • 自动环境管理

📖 完整设置:references/setup-workflows.md

示例:


4. 多语言工作流

对于具有多种语言的仓库,使用 lefthook (推荐性能)或 pre-commit

📖 完整设置:references/setup-workflows.md

示例:


5. Conventional Commits 和语义版本控制

工具: commitlint(验证)、commitizen(交互式提示)、semantic-release(自动化版本控制)

快速启动: 安装commitlint,配置规则,添加commit-msg钩子

📖 完整设置:references/conventional-commits.md

示例:


6. 安全和秘密扫描

工具: gitleaks(秘密检测)、TruffleHog(800+秘密类型带API验证)

快速启动: 安装gitleaks/TruffleHog,添加到pre-commit钩子,配置允许列表用于误报

最佳实践: 本地扫描(pre-commit)和在CI/CD中(拉取请求)

📖 完整设置:references/secret-scanning.md


7. 性能优化

关键策略:

  1. 增量处理 - 仅处理暂存文件(15倍速度提升)
  2. 并行执行 - 使用lefthook并行运行钩子(90%速度提升)
  3. 快速工具 - 使用Ruff(10-100倍更快比Flake8/pylint)
  4. 缓存 - ESLint --cache、dotnet --no-build

📖 详细策略:references/performance-optimization.md


8. 测试和验证

级别:

  • 单元测试 - 测试单个钩子脚本
  • 集成测试 - 测试完整工作流
  • CI/CD验证 - 运行相同的检查本地和远程(深度防御)

📖 示例和模式:references/testing-strategies.md


9. 故障排除

常见问题:

  • 钩子不运行 - 运行框架安装命令,检查core.hooksPath
  • 钩子太慢 - 使用增量处理、并行执行、更快工具
  • Windows路径问题 - 使用引号和正斜杠

迁移策略: 逐步推出(格式化 → linting → 提交验证 → 测试/安全)

📖 完整故障排除:references/troubleshooting.md


配置示例

完整示例可在 examples/ 目录中找到:


迁移和采用

逐步推出策略

阶段1:从格式化开始(低风险)

  • 添加dotnet format / Prettier / Black
  • 警告模式(不阻塞提交)
  • 团队反馈和调整

阶段2:添加linting

  • 添加ESLint / Ruff / StyleCop
  • 错误模式(阻塞提交)
  • 修复现有违规

阶段3:添加提交消息验证

  • 添加commitlint
  • 教育团队关于Conventional Commits
  • 提供commitizen以协助

阶段4:添加测试和安全

  • 在pre-push中添加dotnet test
  • 在pre-commit中添加gitleaks
  • CI/CD强制执行

测试场景

场景1:.NET项目的框架选择

用户查询: “我需要为我的C#项目设置git钩子,有15个开发者”

预期行为:

  • 技能在关键词上激活:“git钩子”、“C#”、“.NET”
  • 提供快速启动决策树指导框架选择
  • 考虑团队规模(中等团队)
  • 推荐Husky.Net(原生集成)或lefthook(性能)
  • 链接到框架比较和设置工作流

场景2:性能优化请求

用户查询: “我的pre-commit钩子花了35秒,阻塞开发者提交”

预期行为:

  • 技能在关键词上激活:“pre-commit钩子”、“慢”、“性能”
  • 识别性能问题
  • 提供立即优化策略
  • 链接到performance-optimization.md以深入

场景3:框架比较请求

用户查询: “我应该为我们的.NET团队使用Husky.Net还是lefthook?”

预期行为:

  • 技能在框架名称上激活:“Husky.Net”、“lefthook”
  • 提供框架比较矩阵
  • 询问相关后续问题(团队规模、性能要求)
  • 基于上下文指导决策

场景4:Conventional Commits实现

**用户查询:“如何在我的JavaScript项目中强制执行Conventional Commits?”

预期行为:

  • 技能在关键词上激活:“Conventional Commits”、“JavaScript”、“强制执行”
  • 识别提交验证需求
  • 提供commitlint的设置步骤
  • 链接到conventional-commits.md以获取完整指南

场景5:秘密扫描集成

用户查询: “我想防止开发者意外提交秘密到我们的仓库”

预期行为:

  • 技能在关键词上激活:“秘密”、“防止”、“提交”
  • 识别安全要求
  • 推荐gitleaks或TruffleHog
  • 链接到secret-scanning.md
  • 提及本地(pre-commit)和CI/CD强制执行

参考资料

官方文档(通过MCP服务器访问):

详细参考资料:

版本历史

  • v1.0.0 (2025-12-26):初始发布

最后更新

日期: 2025-11-28 模型: claude-opus-4-5-20251101

研究来源: Microsoft Learn MCP、Context7 MCP(Husky.Net、lefthook、Husky、pre-commit仓库)、Perplexity MCP(2024-2025最佳实践)、Firecrawl MCP(官方文档网站)、Ref MCP(commitlint、semantic-release)。