12

受信後に単体テストを実行しますが、ユーザーを待たせたくありません。

git-user メーリング リストからの提案を試してみましたが (「&それだけ」)、うまくいきません: https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE

これをhooks/post-receiveに入れただけでも、gitはbashスクリプトが終了するのを待っているようです:

exec-unit-tests.sh &
4

1 に答える 1

22

これは私にとってはうまくいきました。&stdout と stderr パイプを閉じる必要があります。

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

コマンドをバックグラウンドで実行するには、両方のstdoutANDstderrを閉じる必要があります。それらのいずれかを開いたままにしておくと、プロセスはバックグラウンドにならず、フック スクリプトが終了するまでコミット操作は完了しません。

怠惰な代替アプローチは、単純にリダイレクトstdoutstderrて次のようにすること/dev/nullです。

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

これは少しきれいではありませんが、おそらく理解しやすく覚えやすく、同じ効果があります。

于 2013-07-18T20:17:39.757 に答える