Composer报“Git not found”但git --version能运行,是因环境上下文错位:交互式终端配置了PATH,而Web服务、CI、Docker或IDE等非交互式上下文未加载~/.zshrc或~/.bash_profile;需新开纯净终端验证git路径并检查条件式PATH设置,或用GIT_EXECUTABLE指定路径。

composer diagnose报“Git not found”但git --version能跑通
这是环境上下文错位的典型表现:你在交互式终端里配置了PATH,但Composer实际运行在另一个进程上下文(比如Web服务器用户、CI runner、Docker容器、IDE内置终端),压根没加载你的~/.zshrc或~/.bash_profile。
验证方法很简单:新开一个纯净终端(不复用已有会话),依次执行:
-
git --version—— 确认命令可用 -
which git—— 记下路径,比如/usr/local/bin/git -
composer diagnose—— 看输出里是否仍有Git binary not found警告
如果仍失败,重点检查shell配置文件中是否有类似[[ -n $PS1 ]] && export PATH=...这种条件判断——它会让非交互式shell跳过PATH设置。临时绕过方式是直接用完整路径调用:GIT_EXECUTABLE=/usr/local/bin/git composer diagnose。
Windows上where git无输出,但Git明明装了
几乎100%是安装时漏选了“Add Git to the system PATH”选项。Git for Windows默认提供三个PATH选项,只有勾选这一项,才能让PHP子进程(包括Composer)访问到git.exe。
确认步骤:
- 检查路径是否存在:
C:\Program Files\Git\bin\git.exe或C:\Users\{user}\AppData\Local\Programs\Git\bin\git.exe - 把对应
bin目录(不是cmd目录)加进系统环境变量PATH - 必须关闭并重新打开CMD/PowerShell/IDE —— 已打开的窗口不会自动刷新环境变量
- 验证方式:
where git有输出才算真正生效
Linux/macOS中which git返回路径,但Composer仍找不到
常见于多Git版本共存或Docker环境:Composer启动时读取的是父进程的$PATH缓存,或被硬编码指向旧位置(如/usr/bin/git)。
排查手段:
- Linux下用
strace -e trace=execve composer install 2>&1 | grep git看它实际调用哪个路径 - 强制指定Git路径:
composer config -g bin-dir /usr/local/bin,再确保/usr/local/bin/git是新版 - 更稳妥做法:在
~/.bashrc或~/.zshrc中把新版Git目录(如/opt/homebrew/bin或/usr/local/bin)放到$PATH最前面,并重载配置:source ~/.zshrc
macOS Apple Silicon用户尤其注意:Homebrew默认装在/opt/homebrew/bin,而旧脚本常只认/usr/local/bin;Ubuntu/Debian用户若只装了git-core,实际缺的是含完整命令的元包git。
Git装了、PATH也对,但composer install卡在clone阶段
说明Git二进制本身没问题,但协议、密钥或仓库状态异常。常见场景:
- SSH地址写成
git@github.com:xxx/yyy.git,但~/.ssh/config里定义的是Host github-work别名 —— Git不会自动匹配,必须把composer.json里的URL改成git@github-work:xxx/yyy.git - HTTPS克隆报SSL证书错误,大概率是Git版本太低(CentOS 7默认Git 1.8.3),不支持TLS 1.2+;升级Git后加
git config --global http.sslVersion tlsv1.2 - 启用
--prefer-source时卡在--shallow-since参数报错,说明Git
最容易被忽略的一点:即使git clone手动能跑通,Composer也可能因vendor目录残留损坏的.git子模块或权限问题失败——删掉vendor/再试,比反复调PATH更有效。


















