The script takes no parameters, but each ref that is being pushed is passed to the script on a separate line on standard input in the following format: <old-value> <new-value> <ref-name> 如 b6b36c697eb2d24302f89aa22d9170dfe609855b 85baa88c22b52ddd24d71f05db31f4e46d579095 refs/heads/master26
根據Server-side Hooks這個連結的內容,可以知道post-receive和pre-receive一樣在執行前會得到3個參數:
<old-value> <new-value> <ref-name>
ref-name
和相应的hash
值,就可以根据git相应的命令得到对应的信息.如git log refs/heads/master
所以既然知道了https://git-scm.com/book/zh/v...
不同的Hook會在輸入流中攜帶不同的參數,
pre-receive
處理來自客戶端的推播操作時,最先被呼叫的腳本是 pre-receive。 它從標準輸入獲取一系列被推送的引用。如果它以非零值退出,所有的推播內容都不會被接受。 你可以用這個鉤子阻止對引用進行非快進(non-fast-forward)的更新,或者對該推送所修改的所有引用和檔案進行存取控制。
update
update 腳本和 pre-receive 腳本十分類似,不同之處在於它會為每個準備更新的分支各運行一次。 假如推送者同時向多個分支推送內容,pre-receive 只運行一次,相較之下 update 則會為每個被推送的分支各運行一次。 它不會從標準輸入讀取內容,而是接受三個參數:引用的名字(分支),推送前的引用指向的內容的 SHA-1 值,以及用戶準備推送的內容的 SHA-1 值。 如果 update 腳本以非零值退出,只有相應的那一個引用會被拒絕;其餘的仍然會被更新。
post-receive
post-receive 掛鉤在整個過程完結以後運行,可以用來更新其他系統服務或通知使用者。 它接受與 pre-receive 相同的標準輸入資料。 它的用途包括給某個郵件列表發信,通知持續整合(continous integration)的伺服器,或者更新問題追蹤系統(ticket-tracking system) —— 甚至可以透過分析提交資訊來決定某個問題(ticket)是否應該被開啟,修改或關閉。 該腳本無法終止推送進程,不過客戶端在它結束運行之前將保持連接狀態,所以如果你想做其他操作需謹慎使用它,因為它將耗費你很長的一段時間。