pre-commit

pre-commit 是一个非常流行的 Git 钩子(hook)管理工具,用于在代码提交前自动运行代码检查、格式化、静态分析等任务,确保代码质量。



✅ 简要定义:

pre-commit 是一个框架,允许你在 git commit 之前运行一系列自动化的脚本(如代码格式化、lint、检查 secrets、强制代码风格等)。



🚀 为什么使用 pre-commit

  • 保证提交前的代码质量(自动检查和格式化)
  • 防止低级错误(比如没格式化、加了调试代码、留下 print()、或提交了大文件)
  • 团队协作时统一代码风格
  • 避免把 secrets / 密钥意外提交到仓库


🔧 如何使用 pre-commit(入门步骤)

1️⃣ 安装 pre-commit

pip install pre-commit

或者用 brew(macOS):

brew install pre-commit


2️⃣ 添加配置文件 .pre-commit-config.yaml

在你的项目根目录下创建一个 .pre-commit-config.yaml 文件,例如:

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0  # 指定版本
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
  - repo: https://github.com/psf/black
    rev: 24.3.0
    hooks:
      - id: black


3️⃣ 安装 Git 钩子到你的仓库

pre-commit install

这会在 .git/hooks 下注册一个钩子,让它在每次 git commit 时自动运行。



4️⃣ 测试运行

你可以手动触发钩子运行对所有文件检查:

pre-commit run --all-files


📦 常见 Hook 示例(你可以选用)

Hook 名称用途
black自动格式化 Python 代码
flake8Python lint 工具
isort自动整理 import 顺序
trailing-whitespace删除行尾空格
end-of-file-fixer确保文件末尾有换行符
check-yaml检查 YAML 格式合法性
detect-secrets检查代码中是否含有 secrets(如密钥)


💡 高级功能

  • 可以为不同的文件类型/路径定义不同的 hook
  • 支持自定义 hook 脚本
  • 支持 pre-push、commit-msg 等其他 Git 钩子阶段
  • 与 CI 集成(如 GitHub Actions、GitLab CI 等)


🧪 示例:添加 Python 代码检查的完整配置

repos:
  - repo: https://github.com/pre-commit/mirrors-flake8
    rev: v6.1.0
    hooks:
      - id: flake8
  - repo: https://github.com/psf/black
    rev: 24.3.0
    hooks:
      - id: black
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer


📚 官方文档

  • 官网:🔗 https://pre-commit.com
  • 配置库参考:🔗 https://github.com/pre-commit/pre-commit-hooks


如果你告诉我你的项目语言或需求,我可以帮你定制一个 .pre-commit-config.yaml 示例配置。

文章标签:

评论(0)