Git预提交钩子调用Cygwin Mintty未等待脚本完成的解决方法
解决Git预提交钩子等待Cygwin脚本执行完成的问题
问题根源在于你用mintty启动Bash——mintty是独立的终端窗口程序,启动后会和Git钩子进程完全脱离,钩子自然不会等待它执行完毕。换成直接调用Cygwin的bash.exe,就能让钩子同步等待脚本执行结束。
具体修改方案:
找到你Cygwin安装目录下的
bash.exe,默认路径一般是C:\cygwin64\bin\bash.exe(32位版本为C:\cygwin\bin\bash.exe)将预提交钩子中调用
mintty的代码,替换为直接调用bash.exe执行格式化脚本:# 替换为你的bash实际路径和脚本的Cygwin格式路径 "C:\cygwin64\bin\bash.exe" -c "/cygdrive/d/your-repo/format-src.sh"注意:Windows本地路径要转换为Cygwin格式,比如
D:\your-repo\format-src.sh对应Cygwin路径是/cygdrive/d/your-repo/format-src.sh若要兼容不同开发者的Cygwin安装路径,可以让大家设置环境变量
CYGWIN_BASH指向自己的bash.exe,钩子代码调整为:if [ -z "$CYGWIN_BASH" ]; then echo "请设置CYGWIN_BASH环境变量,指向Cygwin的bash.exe路径" exit 1 fi "$CYGWIN_BASH" -c "/cygdrive/d/your-repo/format-src.sh"为了在格式化失败时终止提交流程,可以添加退出码检查:
"$CYGWIN_BASH" -c "/cygdrive/d/your-repo/format-src.sh" if [ $? -ne 0 ]; then echo "代码格式化失败,终止提交" exit 1 fi
修改后,Git预提交钩子会等待bash.exe执行完format-src.sh后,再继续后续提交流程,不会出现脚本仍在运行就完成提交的情况。
内容的提问来源于stack exchange,提问作者MaxM.
相关产品推荐
相关产品推荐

