Git Hooks 超實用指南:用途、工作流程與實戰範例
Git Hooks 允許你在本機或伺服器端於特定 Git 事件發生前後執行腳本,自動化檢查、格式化、測試與部署流程。本文介紹常見 Hook 類型、使用時機與實戰範例 (Shell、Husky、Server-Side)。
一、Git Hooks 分類
節點 | 本機 (Client-Side) | 伺服器端 (Server-Side) |
---|---|---|
Commit | pre-commit , prepare-commit-msg , commit-msg , post-commit |
pre-receive , update , post-receive |
Push | pre-push |
post-update |
其他 | pre-rebase , pre-merge-commit , applypatch-msg , post-checkout |
- |
Hooks 皆位於
repo/.git/hooks/
,初始以.sample
結尾,去掉副檔名並加執行權限即可啟用。
二、本機 Hook 實戰
1. pre-commit:Lint & Test
1 |
|
- 目的:阻止不合規的程式碼進入版本庫。
- 常配合工具:
golangci-lint
,eslint
,prettier
。
2. commit-msg:驗證訊息格式 (Conventional Commits)
1 |
|
3. pre-push:執行 e2e 測試 & 版本標籤檢查
1 |
|
三、Husky:跨平台管理 Hook
1 | npx husky-init && npm install |
優點:
- Hooks 版本化,團隊開箱即用。
- Windows/macOS/Linux 均可運行。
四、伺服器端 Hook 實戰 (CI/CD)
pre-receive:拒絕直推 main
1 |
|
post-receive:自動部署
1 |
|
五、最佳實踐
- 保持 Hook 快速:長時間任務移至 CI;本機 Hook ≤ 1–2 秒。
- 版本控制:使用 Husky 或
git config core.hooksPath
指向專案目錄。 - 可跳過快速修補:
git commit --no-verify
;僅限緊急狀況。 - 安全性:Server-Side Hook 腳本要最小權限執行,避免執行未驗證輸入。
- 日誌 & 告警:Server-Side 建議將輸出導向 syslog,利於排查。
六、結語
Git Hooks 讓 DevOps 自動化從 提交第一步 就開始,把關程式碼品質並加速交付。依團隊流程挑選合適的 Hook,搭配 Husky 或 CI 腳本,即可打造無縫且可靠的開發體驗。
下一次開發前,不妨設定
pre-commit
Lint 與commit-msg
格式檢查,讓品質把關自動進行!
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Comments