pre-commit Git 预提交钩子完整指南:让每次提交前自动过检,三步配置上手
【免费下载链接】pre-commitAutomatically installs a git pre-commit script in your git repository which runs your `npm test` on pre-commit项目地址: https://gitcode.com/gh_mirrors/pre/pre-commit
pre-commit 是一个 Git 预提交钩子框架,每次提交前自动跑一遍代码检查,把不达标的代码挡在外面。三步完成安装与配置,从此不再把脏代码带进仓库。
两个让人头疼的场景
场景一:你刚提完 PR,评审的第一条意见是"把末尾空格修掉",紧接着是"import 顺序不对"。小事不致命,但每次都在浪费评审时间。
场景二:你本地跑得欢,push 上去 CI 却红了。原因不复杂,检查这一步你压根没执行。
要是这些检查能在提交前自动跑,失败了当场拦住,问题不就都解决了吗?pre-commit 干的就是这件事。它在仓库里装一个 Git 预提交钩子,即 git commit 之前自动执行的脚本。检查统一写在一个配置文件里,跨平台通用,装一次就好,新队友跑一条命令就能拿到和你相同的标准。
pre-commit 安装:三步跑起来
第一步,装。全局装一次即可:
pip install pre-commit第二步,在仓库根目录初始化:
pre-commit install钩子写进 .git/hooks,之后每次 git commit 都会自动触发。
第三步,首跑。先把存量代码完整过一遍:
pre-commit run --all-files有问题修完再提交。
一份最小配置看懂 pre-commit
配置文件是仓库根目录的 pre-commit-config.yaml,最小版长这样:
repos: - repo: <官方钩子仓库地址> # 检查逻辑来自哪里 rev: v4.5.0 # 锁定的版本号,相当于一个 commit hooks: - id: trailing-whitespace # 去掉行尾空格 - id: end-of-file-fixer # 文件末尾保留一个换行 - id: check-yaml # 校验 YAML 语法 - id: check-json # 校验 JSON 语法三个字段很好记:repo 是检查逻辑的来源,rev 是锁定的版本号,id 是具体的检查项。官方文档里还有上百个现成钩子,按需抄来改参数即可。
💡 第一次用 pre-commit 容易踩的两个坑
坑一:钩子没过,提交被拦。别慌,终端输出的就是问题清单。修完重新提交;确属误报,可用 git commit --no-verify 跳过一次,但别养成习惯。
坑二:明明配好了,队友机器上怎么没跑?钩子装在每个人的本地 .git 目录,不随代码走。新成员 clone 后要自己再跑一次 pre-commit install。
接 CI 也不难:流水线里跑同一条 pre-commit run --all-files,远程构建就和你的本地一个标准,GitHub Actions 这类 CI 都支持。
pre-commit 常见问题 FAQ
提交会变慢吗?每次提交多几秒,比 PR 被拒后和评审来回一轮快多了。
非 Python 项目能用吗?框架是 Python 写的,钩子却支持多种语言,language: system 还能跑任意系统命令。
偶尔才想跑的检查怎么设?给钩子加 stages: [manual],它就只会被手动点名触发。
✅ 收尾:让 pre-commit 成为你的仓库习惯
代码规范不该靠人的记性。当前项目如果还没装,今天就装上:跑完上面三条命令,让下一次提交成为一次干净的提交。
【免费下载链接】pre-commitAutomatically installs a git pre-commit script in your git repository which runs your `npm test` on pre-commit项目地址: https://gitcode.com/gh_mirrors/pre/pre-commit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考