composer报错找不到git命令,是因为其在拉取dev分支、vcs包或启用--prefer-source时必须调用系统git,而当前执行环境(如web服务、ci、docker)未加载path或用户上下文不同;git --version成功但composer diagnose仍报错,属典型环境错位,需新开纯净终端验证which git与composer diagnose,并检查非交互式shell是否跳过path设置。

Composer install 报错找不到 git 命令,不是 Composer 有问题,而是它在拉取 dev- 分支、VCS 类型包或启用 --prefer-source 时,必须调用系统级 git 可执行文件——如果这个命令在当前执行上下文中不可达,就直接失败。
为什么 git --version 成功但 composer diagnose 还报错?
这是典型的环境错位:你在交互式终端(比如 iTerm 或 CMD)里配置好了 PATH,但 Composer 实际运行在另一个上下文里——可能是 Web 服务(如 Apache/PHP-FPM)、CI runner(GitHub Actions/GitLab CI)、Docker 容器,或者 IDE 内置终端。这些环境往往不加载你的 ~/.zshrc 或 ~/.bash_profile。
- 新开一个**纯净终端**(不复用已有会话),运行
git --version和which git,确认输出有效 - 接着运行
composer diagnose,看是否仍有Git not found警告 - 若仍失败,检查 shell 配置文件中是否有条件判断(如
[[ -n $PS1 ]] && export PATH=...),导致非交互式 shell 跳过PATH设置 - 临时验证:用完整路径调用,例如
GIT_EXECUTABLE=/opt/homebrew/bin/git composer diagnose
Windows 上 git is not recognized 怎么办?
几乎 100% 是 Git for Windows 安装时漏选了“Add Git to the system PATH”——这个选项才把 git.exe 加进系统环境变量,让 PHP 子进程能访问到。
- 检查路径是否存在:
C:\Program Files\Git\bin\git.exe或C:\Users\{user}\AppData\Local\Programs\Git\bin\git.exe - 把对应
bin目录(不是cmd目录)加进系统环境变量PATH - 重启 CMD / PowerShell / IDE —— 已打开的窗口不会自动刷新环境变量
- 验证方式:在新 CMD 中运行
where git,有输出才算真正生效
macOS / Linux 的 PATH 不匹配 Homebrew 或系统默认位置
Apple Silicon(M1/M2/M3)上 Homebrew 默认装在 /opt/homebrew/bin,而旧脚本常只认 /usr/local/bin;Ubuntu/Debian 用户若只装了 git-core,实际缺的是含完整子命令(如 git config)的元包。
- 别依赖 Xcode 自带的阉割版
git(它缺git config等),用brew install git装完整版 - 确认
/opt/homebrew/bin(Apple Silicon)或/usr/local/bin(Intel)在$PATH前置位置 - Linux 上运行
sudo apt install git(不是git-core),否则缺少关键子命令 - Docker / CI 环境:基础镜像默认没
git,Debian/Ubuntu 镜像加RUN apt-get update && apt-get install -y git,Alpine 加RUN apk add --no-cache git
绕过 Git 依赖的临时方案
如果你只是想快速完成安装,且项目不强制要求源码(比如没有 dev- 版本或 "source" 类型仓库),可以用 --prefer-dist 强制走 ZIP 包下载路径。
- 运行
composer install --prefer-dist,跳过所有git clone操作 - 注意:如果
composer.lock记录的是 source 提交哈希,此参数可能被忽略;可先删掉vendor和composer.lock再试 - 这不是修复,只是规避——长期仍需解决
git环境问题,否则更新依赖、切分支、调试源码都会卡住
最常被忽略的一点:PATH 配置后必须新开终端验证,而不是在已打开的窗口里反复重试;更隐蔽的是,某些 IDE 插件或旧版 Laravel Installer 会悄悄往 PATH 里重复添加同一路径,导致长度超限或优先级混乱——这种情况下 git 找得到,但其他命令(比如 php 或 zip)可能突然失灵。











