定義:
鉤子:由事件觸發的函數
分類:
客戶端鉤子:由諸如提交和合並這樣的操做觸發
服務器端鉤子:由諸如接收被推送的提交這樣的聯網操做觸發git
安裝:
a.鉤子都被存儲在 .git 目錄下的 hooks 子目錄中
b.當 git init 初始化一個新版本庫時,默認會在這個目錄中放置一些示例腳本
c.任何正確命名的可執行腳本均可以正常使用(Ruby、Python、shell或其它語言)
d.這些示例的名字都是以.sample 結尾,若是想啓用它們,移除這個後綴就能夠了shell
客戶端鉤子:
提交工做流鉤子:
pre-commit 鉤子在鍵入提交信息前運行
a.用於檢查即將提交的快照,例如,檢查是否有所遺漏,覈查代碼,確認提交權限
b.若是該鉤子以非零值退出,Git 將放棄這次提交
c.能夠用 git commit --no-verify 來繞過這個環節
prepare-commit-msg 鉤子在啓動提交信息編輯器以前,默認信息被建立以後運行
a.入參:存有當前提交信息的文件的路徑、提交類型和修補提交的提交的SHA-1校驗
b.它容許你編輯提交者所看到的默認信息
c.對那些會自動產生默認信息的提交能夠結合提交模板來使用它,動態地插入信息
commit-msg 鉤子在提交以後運行
a.入參:存有當前提交信息的文件的路徑
b.若是該鉤子以非零值退出,Git 將放棄這次提交
c.能夠在提交經過前驗證提交信息
post-commit 鉤子在整個提交過程完成後運行
a.不接收任何參數
b.經過 git log -1 HEAD 來得到最後一次的提交信息
c.通常用於通知之類的事情
電子郵件工做流鉤子:
a.電子郵件工做流鉤子都是由 git am 命令調用
b.若是須要經過電子郵件接收由 git format-patch 產生的補丁,這些鉤子也許用得上
applypatch-msg 鉤子 在git am 運行前被調用
a.接收單個參數:包含請求合併信息的臨時文件的名字
b.若是腳本返回非零值,Git 將放棄該補丁
c.能夠用該腳原本確保提交信息符合格式,或直接用腳本修正格式錯誤
pre-applypatch 鉤子 在git am 運行期間被調用
a.他正好運行於應用補丁以後,產生提交以前,因此能夠用它在提交前檢查快照
b.能夠用這個腳本運行測試或檢查工做區。
c.若是有什麼遺漏,或測試未能經過,腳本以非零值退出,中斷 git am 的運行,補丁就不會被提交
post-applypatch 鉤子 運行於提交產生以後
a.能夠用它把結果通知給一個小組或所拉取的補丁的做者
b.但沒法用它中止打補丁的過程服務器
其餘鉤子:
pre-rebase 鉤子 變基以前被調用
a.以非零值退出能夠停止變基的過程
b.可使用這個鉤子來禁止對已經推送的提交變基
post-rewrite 鉤子被那些會替換提交記錄的命令調用,
a.例如git commit --amend 和 git rebase(不包括 git filter-branch)
b.它惟一的參數是觸發重寫的命令名,同時從標準輸入中接受一系列重寫的提交記錄
c.用途很大程度上跟 post-checkout 和 post-merge 差很少。
post-checkout 鉤子在 git checkout 成功運行後會被調用
a.能夠根據你的項目環境用它調整你的工做目錄
b.例如:放入大的二進制文件、自動生成文檔或進行其餘相似這樣的操做。
post-merge 鉤子在 git merge 成功運行後會被調用
a.能夠用它恢復 Git 沒法跟蹤的工做區數據,例如:權限數據。
b.能夠用來驗證某些在 Git 控制以外的文件是否存在,對這些文件進行處理。app
pre-push 鉤子在 git push 以前調用。
a.它接受遠程分支的名字和位置做爲參數,同時從標準輸入中讀取一系列待更新的引用
b.能夠在推送開始以前,用它驗證對引用的更新操做
c.一個非零的退出碼將終止推送過程
pre-auto-gc 鉤子會在垃圾回收開始以前被調用
a.git的一些平常操做在運行時,偶爾會調用 git gc --auto 進行垃圾回收。
b.能夠用它來提醒你如今要回收垃圾了,或者依情形判斷是否要中斷回收。
說明:克隆某個版本庫時,它的客戶端鉤子 並不 隨同複製。 若是須要靠這些腳原本強制維持某種策略,能夠在服務器端實現這一功能編輯器
服務器端鉤子:
pre-receive 處理來自客戶端的推送操做時,最早被調用的腳本是 pre-receive
a.它從標準輸入獲取一系列被推送的引用。
b.若是它以非零值退出,全部的推送內容都不會被接受
c.能夠用這個鉤子阻止對引用進行非快進(non-fast-forward)的更新
d.能夠對該推送所修改的全部引用和文件進行訪問控制。
update
a.update 腳本和 pre-receive 腳本十分相似,不一樣之處在於它會爲每個準備更新的分支各運行一次
b.假如同時向多個分支推送內容,pre-receive 只運行一次,update 會每個被推送的分支運行一次
c.接受三個參數:引用的名字(分支),推送前引用指向的SHA-1值,推送內容的SHA-1值
d.若是 update 腳本以非零值退出,只有相應的那一個引用會被拒絕;其他的依然會被更新。
post-receive 在整個過程完結之後運行
a.能夠用來更新其餘系統服務或者通知用戶,例如:給某個郵件列表發信,通知持續集成的服務器
b.該腳本沒法終止推送進程
c.不過客戶端在它結束運行以前將保持鏈接狀態函數