Lefthook 是一款基于 Go 语言开发的高性能 Git 钩子管理器,适用于 Node.js、Ruby、Python 及其他各类技术栈的项目。你可以通过 Go 工具、NPM、gem 或 pipx 包管理器轻松完成安装,随后在简洁的 lefthook.yml 配置文件中定义钩子规则,执行 lefthook install 命令即可启用。
这款工具支持并行执行钩子命令,可通过通配符 / 正则表达式筛选指定文件,兼容脚本执行、标签分组、Docker 容器运行,还支持本地配置覆盖;这些特性兼顾了执行速度与使用灵活性,让你对代码检查流程完全可控。
借助 Lefthook,你能在代码提交(commit)、推送(push)环节,自动完成代码语法校验与合规检查,整个过程执行高效且无额外依赖,既大幅节省开发时间,又能毫不费力地保持项目代码的整洁规范。
在团队协作中,Git hooks 常常被寄予厚望:
提交前跑格式化、检查代码风格、拦住明显错误。
但现实往往是——配置分散、执行缓慢、不同成员环境不一致,最后被绕过或直接废弃。
Lefthook 正是为解决这些问题而生的。
Lefthook 是什么?
Lefthook 是一款基于 Go 语言开发的高性能 Git 钩子管理器,用于统一管理 pre-commit、pre-push 等 Git hooks 的执行逻辑。
它不关心你的项目使用什么语言或框架,Node.js、Ruby、Python,甚至纯脚本项目都可以直接使用。
项目由 Evil Martians 维护,整体设计非常偏工程实践,目标明确:
让本地代码检查既快又可靠。
为什么需要 Lefthook?
原生 Git hooks 存在几个长期问题:
- hooks 是本地文件,不进版本控制
- 团队成员配置容易不一致
- 脚本一复杂,执行速度明显拖慢提交
- 跨语言项目难以统一管理
Lefthook 的思路很直接:
把 hooks 当成项目的一部分,用配置文件统一描述,用高性能执行器调度。
核心特性概览
高性能执行(Go 实现)
Lefthook 本体由 Go 编写,启动成本极低。
相较脚本型方案,在频繁 commit 的场景下差异非常明显。
简洁、集中式配置
所有 hooks 都写在一个 lefthook.yml 中,例如:
pre-commit:
parallel: true
commands:
lint:
run: npm run lint
test:
run: npm test
配置清晰、可读、可审查,直接进 Git 仓库。
并行执行,减少等待时间
多个检查任务可以并行运行,而不是串行阻塞。
这在包含 lint + test + typecheck 的项目中非常关键。
精准的文件筛选能力
支持 通配符和正则表达式,只对相关文件触发检查,例如:
- 只改了
.js文件,不跑 Python 测试 - 只改了文档,不跑构建流程
这让 hooks 变得“聪明”,而不是“暴力”。
脚本、标签、Docker 全支持
Lefthook 不限制你怎么跑命令:
- 本地脚本
- npm / pip / bundle 命令
- Docker 容器内执行
- 通过标签(tags)对任务分组、复用
复杂项目也能保持结构清晰。
本地配置覆盖(Local Override)
在团队统一规则之上,允许个人做本地调整,
兼顾一致性与现实环境差异。
安装方式灵活
Lefthook 支持多种安装渠道:
- Go 工具链
- npm
- Ruby gem
- pipx
安装后只需:
lefthook install
即可启用项目中的 hooks 配置。
Github:https://github.com/evilmartians/lefthook
油管:https://youtu.be/IWn5syUGg8w