如何使用内置机制生成Git提交电子邮件?

时间:2015-01-03 19:29:59

标签: git email git-commit

post-receive挂钩是一种众所周知的机制,用于生成总结Git提交的通知电子邮件。但是,据我所知,只有在提交git push时才会调用此钩子进入远程存储库。

如何让Git发送通知电子邮件以响应对本地存储库的提交,而无需向远程推送?

我知道有一个post-commit钩子,但我的印象是它用于其他东西 - 也许是验证?此外,库存脚本是裸露的,没有任何明显的链接到电子邮件脚本。我怀疑可以在其位置复制标准post-receive脚本,因为传递给post-commit钩子的参数似乎与传递给post-receive的参数不同。

我确定可以根据提交ID(可能在内部钩子参数中提供)提出一些自定义脚本来完成此操作。我对一个依赖于或多或少库存/打包的Git脚本的简单解决方案感兴趣;一个小而相对普遍的垫片。这样的事情存在吗?

2 个答案:

答案 0 :(得分:3)

post-commit没有参数,但它不需要任何参数,因为所做的(单个)提交是在HEAD指向提交的任何地方进行的已经完成了。阅读HEAD:如果它是分支的符号引用,则对该分支进行了一次提交;如果它是原始SHA-1,则使用分离的HEAD进行一次提交;如果是别的什么,那很奇怪。 : - )

这比post-receive简单得多,{{1}}可能已收到大量提交,许多标记对象和/或多个参考更新。收件后挂钩电子邮件生成器必须考虑更多可能的情况。

答案 1 :(得分:1)

Pro Git's chapter on Git Hooks介绍了如何解决这个问题。

  

完成整个提交过程后,运行后提交挂钩。它不接受任何参数,但您可以通过运行git log -1 HEAD轻松获得最后一次提交。通常,此脚本用于通知或类似的东西。

HEAD获得所需信息后,您即可编写发送电子邮件的脚本。您可能希望分叉发送电子邮件的过程,否则git commit将等待它发送减慢开发过程。在分叉并退出之前,请确保获取有关HEAD的所有数据,否则可能会发生另一次提交并更改HEAD