You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:02:45