名称: 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。它涵盖框架选择、设置工作流、性能优化、安全集成、测试策略和团队协作模式。
关键能力:
- 自适应框架推荐 基于生态系统、规模和要求
- 完整生命周期支持 从工具选择 → 设置 → 配置 → 测试 → 维护
- 性能优先方法 带有并行执行和增量处理模式
- 默认安全 带有强制秘密扫描集成
- CI/CD集成 用于深度防御验证(本地 + 远程)
- 真实世界示例 带有复制粘贴就绪的配置
何时使用此技能
当您需要时使用此技能:
- 设置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钩子集成”
快速启动决策树
我应该使用哪个框架?
回答这些问题:
-
您的主要生态系统是什么?
-
您的团队规模/规模是什么?
- 独立开发者或小团队 → 任何框架都有效;基于生态系统选择
- 中等团队(5-20) → 优先考虑安装简便和CI/CD集成
- 大团队/企业(20+) → 优先考虑性能(lefthook)、标准化
-
您的性能要求是什么?
- 速度关键 → 使用 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.Net(dotnet 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. 性能优化
关键策略:
- 增量处理 - 仅处理暂存文件(15倍速度提升)
- 并行执行 - 使用lefthook并行运行钩子(90%速度提升)
- 快速工具 - 使用Ruff(10-100倍更快比Flake8/pylint)
- 缓存 - 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/ 目录中找到:
- examples/husky-net-dotnet-format.json - Husky.Net带dotnet format
- examples/lefthook-dotnet.yml - lefthook用于.NET/C#
- examples/husky-javascript-package.json - Husky + lint-staged用于JS/TS
- examples/pre-commit-python.yaml - pre-commit用于Python
- examples/lefthook-polyglot.yml - lefthook用于多语言仓库
- examples/commitlint.config.js - Conventional Commits配置
迁移和采用
逐步推出策略
阶段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服务器访问):
- Husky.Net: https://alirezanet.github.io/Husky.Net/
- lefthook: https://github.com/evilmartians/lefthook
- Husky (JS): https://typicode.github.io/husky/
- pre-commit: https://pre-commit.com/
- commitlint: https://commitlint.js.org/
详细参考资料:
- references/framework-comparison.md - 框架比较和选择标准
- references/setup-workflows.md - 所有生态系统的设置工作流
- references/conventional-commits.md - Conventional Commits设置
- references/secret-scanning.md - 秘密扫描集成
- references/performance-optimization.md - 性能策略
- references/testing-strategies.md - 测试和验证模式
- references/troubleshooting.md - 故障排除指南
版本历史
- 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)。