【发布时间】:2014-10-28 12:25:55
【问题描述】:
我希望在git post-receive 上运行自定义脚本,但我想知道如果/当在第一次推送的脚本完成(或失败)之前连续收到多个推送时,git 的行为如何?接收后挂钩是否排队?
示例场景:接收后挂钩触发脚本将更改的文件复制到远程 NFS 共享。该脚本可能:
- 需要几秒钟以上才能完成
- 如果 NFS 不可用则失败
- 网络中断可能会中断传输,导致失败
【问题讨论】:
标签: git githooks git-post-receive
我希望在git post-receive 上运行自定义脚本,但我想知道如果/当在第一次推送的脚本完成(或失败)之前连续收到多个推送时,git 的行为如何?接收后挂钩是否排队?
示例场景:接收后挂钩触发脚本将更改的文件复制到远程 NFS 共享。该脚本可能:
【问题讨论】:
标签: git githooks git-post-receive
receive-pack 程序是实际运行post-receive 挂钩的程序。 documentation 部分表示:
请注意,当这个钩子运行时,refname 可能没有 sha1-new。如果另一个用户在 git-receive-pack 更新 ref 之后,但在钩子能够评估它之前修改了 ref,则很容易发生这种情况。建议 hooks 依赖 sha1-new 而不是 refname 的当前值。
根据来源,在运行 post-receive 钩子之前删除了包锁定文件,这意味着可以在 post-receive 钩子运行时开始其他更新(本地或远程)。
如果您需要排队或锁定(或两者兼有),则必须自己实现。
【讨论】: