文章目錄
Windows 環境下為 Git Repository 加上 Git Hook
同事因為專案相依的關係,在不同 branch 間可能會誤用不同屬性或是方式,所以想在 repository 切換 branch 時加入提示,提醒工程師記得切換相依專案的 branch,這樣的需求挺適合透過 Git Hook 來處理:在 Git Repository 出現指定行為時執行指定的 script;網路上的範例多為 linux 指令,筆記一下 Windows 環境的使用方式
About Git Hook
在 repository 建立時,.git 資料夾中會自動建立名為 hooks
的子資料夾,預設會提供幾個常見 hook 情境的設定範例,這幾個範例是用來在 linux bash 執行用的,windows 環境中大多無法直接使用
啟用 hook 時,需要加上 hook 類型
為檔名且無附檔名
的檔案,內容可以是任何 script 類型的語法(e.g. python、ruby、vb script…)
自動建立 hooks 資料夾
hook 範例
支援的 hook 類型
詳細資料可以參考 Git Hooks
- applypatch-msg
- pre-applypatch
- post-applypatch
- pre-commit
- prepare-commit-msg
- commit-msg
- post-commit
- pre-rebase
- post-checkout
- post-merge
- pre-receive
- update
- post-receive
- post-update
- pre-auto-gc
- post-rewrite
- pre-push
如何設定 Git Hook
接著一步步來看該如何滿足需求:checkout branch 時提示
repository 加上 post-checkout hook
複製一個
*. sample
–> 改名為 post-checkout 並移除附檔名因為檔案格式的關係,請記得 不要自行新增檔案,否則將無法正確執行
正確執行版本
無法執行版本
加上 hook 內容
- 在檔案第一行加入
#!/bin/bash
標記使用 script 語法 加入實際執行動作
使用 mshta
#!/bin/bash mshta "javaScript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"
使用 msg
將實際執行動作寫成 .bat
msg * "Enter Your Message"
hook 內容就 call 該 .bat 檔
#!/bin/bash "C:\alert.bat"
- 在檔案第一行加入
加上執行權限(非必要)
如果前面步驟完成後,仍無法成功執行,可以嘗試以下設定作法
錯誤訊息
訊息內容
cannot spawn .git/hooks/post-checkout: No such file or directory
錯誤截圖
在 repository 所在位置開啟 git bash
執行
chmod +x .git/hooks/post-checkout
加上執行權限
實際效果
使用 mshta
- 可自訂 title 與大小
不是永遠在視窗最上層
使用 msg
- 永遠在視窗最上層
實際執行語法要另外存放
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。