Git可以定制一些鉤子,這些鉤子可以在特定的情況下被執行,分為Client端的鉤子和Server端的鉤子。Client端鉤子被operation觸發,比如commit,merge等,Server端鉤子被網絡動作觸發,比如pushed commits。
那么鉤子是放在哪的呢?
在.git/hooks/文件夾下。當你init一個倉庫的時候,下邊會有一些鉤子的例子,以.sample結尾。
那么鉤子什么時候被執行,Git預定義了觸發時機:
ClientSide hooks:
1 pre-commit,當執行commit動作時先執行此hook,可以用此hook做一些檢查,比如代碼風格檢查,或者先跑測試。
2 prepare-commit-msg, 當commit時需要輸入message前會觸發此hook,可以用此hook來定制自己的default message信息。
3 commit-msg,當用戶輸入commit的message后被觸發,可以用此hook校驗message的信息,比如是否符合規定,有沒有cr等。
4 post-commit, 當commit完成后被觸發,可以用此hook發送notification等。
5 pre-rebase, rebase之前會被觸發,可以用此hook來拒絕所有的已經push的commits進行rebase操作。
6 post-merge, 當merge成功后,會觸發此hook。
7 pre-push, 當push時,remote refs被更新,但是在所有的objects傳輸前被觸發。
8 pre-auto-gc, 當git gc --auto執行前被觸發。在垃圾回收之前做一些驗證或備份是挺不錯的。
ServerSide hooks:
1 pre-receive, 當收到push動作之前會被執行。
2 update, 也是收到push動作之前被執行,但是有可能被執行多次,每個branch一次。
3 post-receive, 當push動作已經完成的時候會被觸發,可以用此hook來push notification等,比如發郵件,通知持續構建服務器等。
記住所有的hook都應該是可被執行的。
chmod u+x your_hook
所以你可以用shell腳本,perl,python等寫鉤子。