git伺服器的鉤子如何取得git客戶端的提交信息
怪我咯
怪我咯 2017-05-17 10:03:16
0
2
784

git伺服器端的hooks有三個

pre-receive: 推送接受前
update: 推送更新中
post-receive: 推送接受后

我想在post-receive中執行一個腳本,需要知道客戶端推送的時候推送的分支名。但查閱不少資料
都沒有提到hooks腳本如何取得客戶端推送資訊的方法。

例如git客戶端a向git伺服器b推送了分支hotfix1.2.3的一些更新,我想在git伺服器b的hooks裡根據這次推送行為的分支名,也就是hotfix1.2.3,執行某個腳本。如何做到呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(2)
PHPzhong

根據Server-side Hooks這個連結的內容,可以知道post-receive和pre-receive一樣在執行前會得到3個參數:
<old-value> <new-value> <ref-name>

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

9855b 85baa88c22b52ddd24d71f05db31f4e46d579095 refs/heads/master

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)是否應該被開啟,修改或關閉。 該腳本無法終止推送進程,不過客戶端在它結束運行之前將保持連接狀態,所以如果你想做其他操作需謹慎使用它,因為它將耗費你很長的一段時間。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!