git post-receive hooks的排队?

时间:2014-09-03 21:21:43

标签: git githooks git-post-receive

我希望在git post-receive上运行自定义脚本,但是我想知道如果/在第一次推送完成(或失败)的脚本之前连续多次推送多次推送时git是如何表现的? post-receive hooks队列?

示例场景:接收后挂钩触发脚本将已更改的文件复制到远程NFS共享。这个脚本可以:

  • 需要更长时间才能完成
  • 如果NFS不可用,则
  • 失败
  • 网络中断可能会中断传输,导致失败

1 个答案:

答案 0 :(得分:1)

receive-pack程序实际上运行post-receive挂钩。 documentation部分说:

  

请注意,当此挂钩运行时,refname可能没有sha1-new。如果另一个用户在git-receive-pack更新之后修改了ref,但是在钩子能够评估它之前,这很容易发生。建议钩子依赖于sha1-new而不是refname的当前值。

根据源,运行post-receive挂钩之前删除包锁文件,这意味着在post-receive挂钩运行时可以开始其他更新(本地或远程)。

如果您需要排队或锁定(或两者兼而有之),您必须自己实施。