收到后和更新后有什么区别?

tru*_*ktr 26 git

我想更新一个裸仓库,并在使用钩子推送到它之后让它做一些事情.我应该使用哪一个?git-scm书说他们都在所有refs更新后都开火,所以我不知道有什么区别.

Way*_*Lue 19

文档:

后得到:

这取代了<post-update>钩子,除了它们的名称之外,它还获得了所有引用的旧值和新值.

更新后的:

'post-update'钩子可以告诉我们推动的头部是什么,但是它不知道它们的原始值和更新值是什么,因此它是一个很难做旧log..new的地方.该<post-receive>钩并得到裁判的原件和更新的值.如果你需要它们,你可以考虑它.

  • post-receive是更新后功能的超级集合,它是在推送头之后所以我想想post-receive应该足够了. (4认同)

Von*_*onC 6

一个最近提交了Git的2.2+(2014年11月),由JUNIOÇ滨野(gitster)的确提到:

pre-receivepost-receive钩被设计为在旧式的改进updatepost-update钩,这取他们的命令行上的更新信息和通过在命令行长度限制被限制.

相同的信息从标准输入馈送到前/后接收挂钩,而不是解除此限制.

这些新样式挂钩必须完全从标准输入流中使用更新信息.否则,他们将冒险通过杀死接收包过程SIGPIPE.

它现在增加:

如果一个钩子不想查看所有信息,很容易将其标准输入发送到/dev/null(可能需要使用钩子的利基可能只需要知道推送的事实,而不必知道什么是对象推动更新哪个refs),这已经由现有的小心写的钩子完成了.

但是,因为没有很好的方法来一致地失败不完全消耗输入的钩子(一个小的推送可能会导致一个可能适合管道缓冲区的短更新记录,receive-pack进程可能会在钩子具有之前写入有机会在没有阅读任何东西的情况下退出,这不会导致死亡的信号receive-pack,这可能导致难以诊断"曾经在一个蓝色的月亮"幻影失败.

解除这个"钩子必须完全消耗他们的输入"的命令.