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

时间:2012-03-11 07:17:21

标签: git

我想更新一个裸仓库,并在使用钩子将某些东西推到它后做一些事情。我应该使用哪一个? git-scm书说他们都在更新了所有参考之后开火,所以我不知道区别是什么。

2 个答案:

答案 0 :(得分:18)

来自documentation

后得到:

  

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

更新后:

  

“更新后”钩子可以分辨出被推动的头部是什么,但是它不知道它们的原始值和更新值是什么,所以它是一个很难做旧日志的地方。 <post-receive>挂钩确实获得了refs的原始值和更新值。如果你需要它们,你可以考虑它。

答案 1 :(得分:6)

对于Git 2.2 +的recent commit(2014年11月),Junio C Hamano (gitster)提到:

  

pre-receivepost-receive挂钩旨在改进旧式updatepost-update挂钩,它们在命令行上获取更新信息并受命令行长度限制限制。

     

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

     

这些新样式挂钩必须完全从标准输入流中使用更新信息。否则,他们可能会冒险通过SIGPIPE终止接收包过程。

现在增加:

  

如果一个钩子不想查看所有信息,很容易将其标准输入发送到/dev/null(也许钩子的利基使用可能只需要知道推送的事实,无需知道哪些对象被推送以更新哪些refs),   这已经通过仔细编写的现有钩子完成了。

     

但是,因为没有好的方法可以一直失败不完全消耗输入的挂钩(小推送可能会导致可能适合管道缓冲区的短更新记录,receive-pack进程可能设法写在钩子有机会退出而没有阅读任何东西,这不会导致receive-pack的信号死亡,它可能导致难以诊断&#34;一旦进入蓝月亮#34;幻影失败。

     

抬起这个&#34;挂钩必须完全消耗他们的输入&#34;任务。