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" Barry.Wu@Harman.com
#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" Barry.Wu@Harman.com
fi
这样当有一个叫barry的用户提交代码以后,git服务器端将会自动发邮件给需要的用户,可以实时获取git服务器状态。当然,这需要git服务器端支持sendmail发送邮件。