pre-commit Git 预提交钩子完整指南:让每次提交前自动过检,三步配置上手
2026/8/24 2:33:05 网站建设 项目流程

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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询