Git推送代码时如何自动发送邮件 找不到post-receive相关文件怎么办
Git push触发自动邮件发送配置解决方案
1. post-receive 钩子文件获取方式
Git的钩子文件默认存放在远程仓库的hooks目录下,初始只有带.sample后缀的示例文件,没有直接可用的post-receive可执行文件,你可以通过两种方式获取:
- 直接手动新建空白的
post-receive文件 - 复制自带的示例文件修改使用:
# 进入你的远程仓库对应hooks目录 cd /path/to/your/remote/repo.git/hooks # 复制示例文件并去除后缀 cp post-receive.sample post-receive # 必须添加可执行权限,否则钩子无法触发 chmod +x post-receive
2. post-receive-email 脚本获取方式
这个是Git官方自带的邮件通知辅助脚本,不同系统存放路径不同:
- Debian/Ubuntu 系列:默认路径为
/usr/share/doc/git/contrib/hooks/post-receive-email,找不到可以先执行apt install git-contrib安装扩展包 - RHEL/CentOS/Fedora 系列:默认路径为
/usr/share/git-core/contrib/hooks/post-receive-email,找不到可以先执行yum install git-contrib安装扩展包 - 源码编译安装Git的情况:脚本在源码解压目录的
contrib/hooks/post-receive-email路径下
你也可以不依赖这个单独脚本,直接把邮件逻辑写在post-receive文件中即可。
3. 可用配置示例
以下是不需要依赖post-receive-email的极简配置,直接把内容写入你的post-receive文件即可生效:
#!/bin/bash # 配置收发件人地址 RECEIVE_MAIL="目标收件邮箱@example.com" SEND_MAIL="发件邮箱@example.com" # 读取推送的版本信息 while read oldrev newrev refname do # 提取推送分支名 branch=$(git rev-parse --symbolic --abbrev-ref $refname) # 生成邮件正文 echo "仓库收到新的推送提交" > /tmp/git_push_mail.tmp echo "======================" >> /tmp/git_push_mail.tmp echo "推送分支:$branch" >> /tmp/git_push_mail.tmp echo "提交详情:" >> /tmp/git_push_mail.tmp git log --pretty=format:"%h | 提交人:%an | 时间:%ar | 提交说明:%s" $oldrev..$newrev >> /tmp/git_push_mail.tmp # 调用系统邮件服务发送,确保你的服务器已配置sendmail/postfix等邮件服务 sendmail -f $SEND_MAIL $RECEIVE_MAIL < /tmp/git_push_mail.tmp # 清理临时文件 rm -f /tmp/git_push_mail.tmp done
注意事项
- 如果使用第三方Git托管平台(GitHub/GitLab/Gitee等),不需要自行配置钩子,直接开启平台自带的邮件通知功能即可
- 自行托管的仓库必须确保服务器邮件发送服务正常运行,否则会出现邮件发送失败的问题
内容的提问来源于stack exchange,提问作者mattsu
相关产品推荐
相关产品推荐

