git邮件发送

来源:互联网 发布:乐乎lofter手机版 编辑:程序博客网 时间:2024/05/17 22:24

1. 下载脚本:  post-receive

    根据原版修改的一个发送脚本:  http://download.csdn.net/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.csdn.net/joans123/article/details/6754870