跳至主要内容

[note] Python pre-commit

安裝與初始化

uv add --dev pre-commit

# 安裝 git hooks
uvx pre-commit install

# 手動對所有檔案執行
uvx pre-commit run --all-files

.pre-commit-config.yaml 設定

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.4.0
hooks:
- id: ruff
types_or: [python, pyi]
args: [--fix]
- id: ruff-format

Hook 設定欄位

stages — 何時執行

說明
pre-commitcommit 時觸發
pre-pushpush 時觸發

files — 誰觸發

用 regex 篩選,只有符合的檔案變動才觸發:

files: ^(pyproject\.toml|uv\.lock)$

always_run — 要不要每次都跑

說明
false(預設)只有相關檔案變動才跑
true不管改什麼都執行,蓋過 files 的設定

pass_filenames — 要不要傳檔案路徑

說明適合
true(預設)將變動的檔案路徑附加到指令後,例如 ruff check src/a.py src/b.pylinter、formatter
false只執行 entry 指令本身pytest、export script

types_or — 對哪些檔案類型執行

符合任一類型就觸發(OR 關係):

types_or: [python, pyi]

重要關係

  • files 決定「要不要觸發」,pass_filenames 決定「觸發後傳不傳路徑」
  • always_run: true 會蓋過 files 的篩選條件