我想更新一个裸仓库,并在使用钩子将某些东西推到它后做一些事情。我应该使用哪一个? git-scm书说他们都在更新了所有参考之后开火,所以我不知道区别是什么。
答案 0 :(得分:18)
后得到:
这取代了
<post-update>
钩子,除了它们的名称之外,它还获得了所有引用的旧值和新值。
更新后:
“更新后”钩子可以分辨出被推动的头部是什么,但是它不知道它们的原始值和更新值是什么,所以它是一个很难做旧日志的地方。
<post-receive>
挂钩确实获得了refs的原始值和更新值。如果你需要它们,你可以考虑它。
答案 1 :(得分:6)
对于Git 2.2 +的recent commit(2014年11月),Junio C Hamano (gitster
)提到:
pre-receive
和post-receive
挂钩旨在改进旧式update
和post-update
挂钩,它们在命令行上获取更新信息并受命令行长度限制限制。相同的信息从标准输入馈送到前/后接收挂钩,而不是解除此限制。
这些新样式挂钩必须完全从标准输入流中使用更新信息。否则,他们可能会冒险通过
SIGPIPE
终止接收包过程。
现在增加:
如果一个钩子不想查看所有信息,很容易将其标准输入发送到
/dev/null
(也许钩子的利基使用可能只需要知道推送的事实,无需知道哪些对象被推送以更新哪些refs), 这已经通过仔细编写的现有钩子完成了。但是,因为没有好的方法可以一直失败不完全消耗输入的挂钩(小推送可能会导致可能适合管道缓冲区的短更新记录,
receive-pack
进程可能设法写在钩子有机会退出而没有阅读任何东西,这不会导致receive-pack
的信号死亡,它可能导致难以诊断&#34;一旦进入蓝月亮#34;幻影失败。抬起这个&#34;挂钩必须完全消耗他们的输入&#34;任务。