1. 下载脚本: post-receive
根据原版修改的一个发送脚本: http://download.youkuaiyun.com/detail/joans123/5686621
获取git项目下config文件中的内容:
收件人列表: recipients=$(git config hooks.mailinglist)
里程碑收件人列表, 不是必须的: tagrecipients=$(git config hooks.tagmailinglist)
邮件标题前缀: emailprefix=$(git config hooks.emailprefix || echo '[GIT] ')
邮件标题项目: projectdesc=$(git config hooks.projectdesc || echo '[UNKNOWN]')
git执行发送邮件脚本时会输入三个参数:
*) oldrev : 旧版本号, 一般为SHA值缩写
*) newrev : 新版本号.
*) refname : 引用名称. 引用名称一般是指此次操作的版本名称. 有如下指:
refs/tags/* (里程碑版本), refs/heads/* (分支版本), refs/remote/* (远程版本).
根据引用类型以及版本操作可分为: refname_type = tag(提交到指定tag) | annotated tag (创建一个tag) | branch (提交到分支)
oldrev 和 newrev 之间可能跨越多个版本号, 也就是一次行提交多个commit. 可以通过rev-list命令获取所有版本:
git rev-list $newrev..$oldrev
获取指定版本的更新类型, 要么commit要么打tag : newrev_type=$(git cat-file -t $newrev 2> /dev/null)
==================================================================
从提交新旧版本之间的关系,可以判断出版本的创建/更新/删除操作:
# --- Interpret
# 0000->1234 (create)
# 1234->2345 (update)
# 2345->0000 (delete)
if expr "$oldrev" : '0*$' >/dev/null
then
change_type="create"
else
if expr "$newrev" : '0*$' >/dev/null
then
change_type="delete"
else
change_type="update"
fi
fi
==================================================================
邮件内容包括:
1. 邮件头部: 说明此次提交的引用类型: 即创建/更新/删除 --- branch/tag --- 操作版本名称
2. 根据相应的操作生成邮件内容: 操作 + (创建tag | general) 的组合.
获取全部SHA值: git rev-parse
2. mutt指定发件人发送邮件:
mutt -e 'my_hdr from:aa<bb.com>' -s "test" xxx@xx.com < mail-content.txt
mutt发送邮件配置参考: http://blog.youkuaiyun.com/joans123/article/details/6754870