Git可以定制一些鉤子闰集,這些鉤子可以在特定的情況下被執(zhí)行私痹,分為Client端的鉤子和Server端的鉤子捎迫。Client端鉤子被operation觸發(fā)踢星,比如commit澳叉,merge等,Server端鉤子被網(wǎng)絡(luò)動作觸發(fā),比如pushed commits成洗。
那么鉤子是放在哪的呢五督?
在.git/hooks/文件夾下。當你init一個倉庫的時候瓶殃,下邊會有一些鉤子的例子充包,以.sample結(jié)尾。
那么鉤子什么時候被執(zhí)行遥椿,Git預定義了觸發(fā)時機:
ClientSide hooks:
1 pre-commit基矮,當執(zhí)行commit動作時先執(zhí)行此hook,可以用此hook做一些檢查冠场,比如代碼風格檢查家浇,或者先跑測試。
2 prepare-commit-msg碴裙, 當commit時需要輸入message前會觸發(fā)此hook钢悲,可以用此hook來定制自己的default message信息。
3 commit-msg青团,當用戶輸入commit的message后被觸發(fā)譬巫,可以用此hook校驗message的信息,比如是否符合規(guī)定督笆,有沒有cr等芦昔。
4 post-commit, 當commit完成后被觸發(fā),可以用此hook發(fā)送notification等娃肿。
5 pre-rebase, rebase之前會被觸發(fā)咕缎,可以用此hook來拒絕所有的已經(jīng)push的commits進行rebase操作。
6 post-merge, 當merge成功后料扰,會觸發(fā)此hook凭豪。
7 pre-push, 當push時,remote refs被更新晒杈,但是在所有的objects傳輸前被觸發(fā)嫂伞。
8 pre-auto-gc, 當git gc --auto執(zhí)行前被觸發(fā)。在垃圾回收之前做一些驗證或備份是挺不錯的拯钻。
ServerSide hooks:
1 pre-receive, 當收到push動作之前會被執(zhí)行帖努。
2 update, 也是收到push動作之前被執(zhí)行,但是有可能被執(zhí)行多次粪般,每個branch一次拼余。
3 post-receive, 當push動作已經(jīng)完成的時候會被觸發(fā),可以用此hook來push notification等亩歹,比如發(fā)郵件匙监,通知持續(xù)構(gòu)建服務器等凡橱。
記住所有的hook都應該是可被執(zhí)行的。
chmod u+x your_hook
所以你可以用shell腳本亭姥,perl稼钩,python等寫鉤子。