[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-commit | commit 時觸發 |
pre-push | push 時觸發 |
files — 誰觸發
用 regex 篩選,只有符合的檔案變動才觸發:
files: ^(pyproject\.toml|uv\.lock)$
always_run — 要不要每次都跑
| 值 | 說明 |
|---|---|
false(預設) | 只有相關檔案變動才跑 |
true | 不管改什麼都執行,蓋過 files 的設定 |
pass_filenames — 要不要傳檔案路徑
| 值 | 說明 | 適合 |
|---|---|---|
true(預設) | 將變動的檔案路徑附加到指令後,例如 ruff check src/a.py src/b.py | linter、formatter |
false | 只執行 entry 指令本身 | pytest、export script |
types_or — 對哪些檔案類型執行
符合任一類型就觸發(OR 關係):
types_or: [python, pyi]
重要關係
files決定「要不要觸發」,pass_filenames決定「觸發後傳不傳路徑」always_run: true會蓋過files的篩選條件