【问题标题】:Asynchronous git hook?异步git钩子?
【发布时间】:2013-07-17 15:08:34
【问题描述】:

我在接收后执行单元测试,但不希望用户等待它。

我尝试了 git-user 邮件列表中的建议(“just & it”),但这不起作用:https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE

git 似乎在等待 bash 脚本退出,即使我只是把它放在 hooks/post-receive 中:

exec-unit-tests.sh &

【问题讨论】:

  • 您是否尝试过该帖子中建议的其他方法,例如使用 cron 来安排异步作业?像at 这样按需安排工作(并且在不久的将来)也可能值得研究
  • 这可能也行,我没试过。

标签: git githooks


【解决方案1】:

这对我有用。 & 和 stdout & stderr 管道必须关闭:

long-running-command >&- 2>&- & 

为了将命令置于后台,stdoutstderr 都必须关闭。如果其中任何一个处于打开状态,则该进程将不会在后台,并且在挂钩脚本完成之前提交操作不会完成。

一种懒惰的替代方法是简单地将stdoutstderr 重定向到/dev/null

long-running-command >/dev/null 2>&1 & 

这有点不干净,但可能更容易理解和记住,并且效果相同。

【讨论】:

  • 在这里找到:git.661346.n2.nabble.com/…
  • 实际上 stdoutstderr 都必须关闭(就像你的答案已经这样做了)。如果其中任何一个处于打开状态,则该过程将不会在后台运行。我个人使用>/dev/null 2>/dev/null & 来获得相同的效果,因为无需查看man bash 就更容易知道它的作用。
  • 我更喜欢您的 /dev/null 解决方案!请给出答案
  • 谢谢,我很欣赏你的体育精神 :) 但你首先回答了,你应该得到荣耀 ;-) 我将我的版本附加到你的版本中,如果你愿意,请随时进行进一步的更改。稍后我将删除这个和我以前的 cmets 进行清理。
  • 这些命令现在都不起作用。自从发布此答案以来,git hooks 可能已经更新,因为现在看来 git hook 脚本总是等到所有子进程都完成后再返回。即使使用 python 脚本作为 git 钩子,这似乎也会发生。
猜你喜欢
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2023-03-16
相关资源
最近更新 更多