在Windows计算机上,我添加了一个git-hook来启动构建;这需要通过cmd.exe运行,我不希望git-hook脚本等待该脚本完成执行,因为这将意味着每次推送都需要很长时间才能完成。
要重现该问题,请在Windows上git bash的空目录中运行以下命令:
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-hook脚本后重新运行git push。
我已经尝试了可以想到的“不等待被调用脚本退出”这两种方法的每一种组合;在bash中,您附加&符&:
cmd.exe /c "sleep 2" &
在cmd.exe(蝙蝠文件)中,您将start
行:
cmd.exe /c "start \"title\" sleep 2"
我希望这两种方法都可以起作用-即git push
应该很快就会失败,而不是等2秒钟才失败。
嵌套cmd似乎不会对此造成影响:
cmd.exe /c "cmd.exe /c \"start \"\" sleep 2\"" &
提交答案时,请确保还通过将sleep 2
替换为例如,来检查赋予cmd.exe的命令是否实际执行。 mkdir ..\foo
以便您可以检查,不仅在给定sleep命令时脚本可以快速完成,而且在给定mkdir命令时可以实际创建目录。
cmd.exe /c "mkdir ..\foo"
例如,以下立即完成,但这是因为sleep 2从未执行,因为/ c需要用下一个参数引起来。
cmd.exe /c start \"title\" sleep 2
答案 0 :(得分:1)
我试图做同样的事情,最终有了一个想法来调用另一个 bash 脚本:
sh $(pwd)/.git/hooks/runCmd.sh >/dev/null 2>&1 &
它调用我想要的 CMD 脚本并传递参数。 bash 脚本的主体:
#!/bin/sh
start "Path\MyCmd.cmd" hook
exit 0
在这种情况下,路径是相对于存储库根目录的。