Pre-commit hooks are fundamentally broken
5 months ago
- #development
- #git
- #pre-commit
- 预提交钩子由于几个根本性问题存在缺陷。
- 它们在工作树而非暂存区运行,会遗漏已暂存的更改。
- 在变基操作中预提交钩子可能失败,特别是遇到合并冲突或修改提交时。
- 它们可能因现有文件中无关的格式问题而阻止提交。
- 预提交钩子无法处理缺少特定文件的分支或旧版本钩子。
- 导致很多场景下必须使用`--no-verify`参数,违背了钩子的设计初衷。
- 推荐使用预推送钩子作为更优替代方案,可规避多数问题。
- 编写预推送钩子的技巧包括:在暂存区运行、保持快速可靠、静默执行。
- 应避免自动安装钩子,推荐通过清晰文档指导手动安装。