post-receive
挂钩是一种众所周知的机制,用于生成总结Git提交的通知电子邮件。但是,据我所知,只有在提交git push
时才会调用此钩子进入远程存储库。
如何让Git发送通知电子邮件以响应对本地存储库的提交,而无需向远程推送?
我知道有一个post-commit
钩子,但我的印象是它用于其他东西 - 也许是验证?此外,库存脚本是裸露的,没有任何明显的链接到电子邮件脚本。我怀疑可以在其位置复制标准post-receive
脚本,因为传递给post-commit
钩子的参数似乎与传递给post-receive
的参数不同。
我确定可以根据提交ID(可能在内部钩子参数中提供)提出一些自定义脚本来完成此操作。我对一个依赖于或多或少库存/打包的Git脚本的简单解决方案感兴趣;一个小而相对普遍的垫片。这样的事情存在吗?
答案 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
。