Сделайте вызов git-hook cmd.exe, не дожидаясь завершения этого процесса - PullRequest
1 голос
/ 23 апреля 2019

На компьютере с 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
...