post-receive介紹
post-receive鉤子在客戶端完成push動作之後被觸發,它只執行一次,且不接受參數。它會接收一個標準輸入,包含3個參數:
<old-value> SP <new-value> SP <ref-name> LF
SP是空格,LF是換行符,old-value表示上一個提交的SHA1碼,new-value是指這一次提交的SHA1碼,ref-name是分支的全稱,例如:
refs/heads/master
瞭解了這個標準輸入的內容後,就可以利用post-receive鉤子來實現當有用戶提交到git服務器時,用郵件通知其它用戶這個git倉庫有提交,或者用來做持續集成。
實現post-receive的shell腳本
#!/bin/bash
#echo -e "Hi all\n$branch branch has update\nBR\nBarry" | mail -s "$branch update" [email protected]
#branch=$(git symbolic-ref --short HEAD)
while read mes mes ref //讀取post-receive輸入流中的3個參數
do
branch=$(echo $ref | awk -F '/' '{print $3}')
git checkout -b $branch
done
author=$(git log -1 | grep Author | awk -F ':' '{print $2}' | awk -F '<' '{print $1}' | sed 's/ //g')
content=$(git log -1)
if [ $author=="barry" ];then
#curl --user aaa:123456 -s http://10.216.17.20:8080/job/k226daily/build?token=123456
echo -e "Hi all\n$author has update in branch $branch\n $content\n\n\nBR\nBarry" | mail -s "$branch update" [email protected]
fi
這樣當有一個叫barry的用戶提交代碼以後,git服務器端將會自動發郵件給需要的用戶,可以實時獲取git服務器狀態。當然,這需要git服務器端支持sendmail發送郵件。