【问题标题】:A way not to wait for Heroku to compile/Git pre-receive hook to finish一种不等待 Heroku 编译/Git 预接收钩子完成的方法
【发布时间】:2013-08-07 19:05:22
【问题描述】:

我经常通过 Git 将 Rails 构建推送到 Heroku。对于那些不熟悉的人,代码会通过git push 推送到 Heroku,并且预接收挂钩会在验证接收之前编译整个内容。

问题是,等待编译总是很长(对我来说通常是 2 分钟),并且当一个人最终推送和重新推送许多小的更改时,它会加起来。两分钟可以变成十五分钟,而我被剥夺了我的外壳。

有没有办法不必在编译/挂钩完成后等待重新获得我的外壳但仍能获得反馈,例如。如果失败了?

我知道挂起 (^Z) 命令,但我不确定它是否会停止进程/阻止反馈。

【问题讨论】:

  • 打开两个shell怎么样?另外,您是否将 Heroku 用于部署 源代码控制?是否可以只使用 GitHub 之类的东西来托管远程存储库,而只使用 Heroku 进行部署?
  • @cupcake 打开两个 shell 确实有效 (;o]) 但有时我忘记了要使用的 正确 shell 并且必须等待。不,我的用例不仅使用 Heroku,还使用 ​​Github 进行托管。但是,我觉得这并不重要,因为我仍然需要将更改推送到 Heroku。

标签: git shell heroku push githooks


【解决方案1】:

我想如果预接收挂钩失败,它会以退出代码退出。这可能意味着git push 本身存在一个非零退出代码。

如果是这种情况,您可以运行一个小型包装器:git push,将所有输出重定向到一个文件,完成后检查退出代码。如果成功,请随意通知自己(电子邮件?哔声?)。如果失败 -- 相同,您可以检查临时文件中的输出。

您将在“后台”运行的包装器:git_push_wrapper.sh mybranch &

如果你真的想要,你也可以在脚本本身内“分离”(守护它),这样你就可以在没有& 的情况下运行,而不会得到[1] 4844[1]+ Done

【讨论】:

    【解决方案2】:

    可能有更好的 Heroku 专用解决方案,但您可以尝试 git push &。看到这个人(命令等待 10 秒并将“foo”打印到标准输出):

    $ sleep 10 && echo -e "\nfoo" &
    [1] 4844
    echo "doing my thing"
    doing my thing
    $
    foo
    echo "keep doing my thing"
    keep doing my thing
    [1]+  Done                    sleep 10 && echo -e "\nfoo"
    

    【讨论】:

    • 我想过这个,但是一个被钩子的输出“视觉中断”了。
    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2012-11-04
    • 2023-03-16
    相关资源
    最近更新 更多