На компьютере с Windows я добавляю git-hook, который запускает сборку;это должно быть выполнено через cmd.exe, и я не хочу, чтобы скрипт git-hook ожидал его завершения, поскольку это означало бы, что для каждого нажатия потребуется много времени.
Для воспроизведенияпроблема, запустите эти команды в пустом каталоге из git bash на windows:
mkdir githooks && cd githooks/
git init --bare
cd ..
git clone githooks clone
cd clone
git commit --allow-empty -m "1"
и сохраните следующее в ./githooks/hooks/update
#!/bin/bash
cmd.exe /c "sleep 2"
exit 1;
в git bashокно, из каталога клонов, в котором я вас оставил, запустите git push
.Обратите внимание, что завершать скрипт обновления с помощью exit 1;
удобно, так как вы можете перезапускать git push после каждого редактирования скрипта git-hook.
Я испробовал каждую комбинацию, которую смог придумать для двух методов«не ждет выхода вызываемого скрипта»;в bash вы добавляете амперсанд &:
cmd.exe /c "sleep 2" &
в cmd.exe (файлы bat), вы должны start
строку:
cmd.exe /c "start \"title\" sleep 2"
Я бы ожидал любой из этихподошел к работе - то есть git push
должен быстро потерпеть неудачу, вместо того, чтобы ждать 2 секунды, прежде чем потерпеть неудачу.
Вложенные cmd не влияют на это:
cmd.exe /c "cmd.exe /c \"start \"\" sleep 2\"" &
При отправке ответа,также убедитесь, что команда, переданная cmd.exe, действительно выполняется, заменив sleep 2
, например, mkdir ..\foo
, чтобы вы могли проверить, что сценарий быстро завершается не только при получении команды sleep, но и приКоманда mkdir, каталог фактически создан.
cmd.exe /c "mkdir ..\foo"
Например, следующее немедленно завершается, но это потому, что sleep 2 никогда не выполняется, так как / c требуется следующий параметр в кавычках.
cmd.exe /c start \"title\" sleep 2