Асинхронный крюк git?

Я выполняю модульные тесты после приема, но не хочу, чтобы пользователь ждал его.

Я попробовал предложения из списка рассылки git -user ( "просто & it" ), но это не работает: https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE

git, похоже, ждет выхода bash script, даже если я просто поставлю это в hooks/post-receive:

exec-unit-tests.sh &

Ответ 1

Это сработало для меня. & и труба stdout и stderr должна быть закрыта:

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

Чтобы поставить команду в фоновом режиме, необходимо закрыть как stdout AND stderr. Если любой из них оставлен открытым, процесс не будет в фоновом режиме, и операция фиксации не будет завершена до тех пор, пока не будет завершен hook script.

Ленай альтернативный подход состоит в том, чтобы просто перенаправить stdout и stderr в /dev/null:

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

Это немного менее чисто, но, возможно, легче понять и запомнить, и он имеет тот же эффект.