composer报“git not found”是因特定场景(如dev分支、vcs仓库)必须调用系统git命令,而当前执行环境未识别到git——需同时满足已安装、path正确、用户一致、shell非交互式限制被绕过;环境错位最常见,应新开纯净终端验证git --version与composer diagnose,并检查shell配置是否仅对交互式生效。

Composer 更新报错 “Git not found”,不是 Composer 坏了,而是它在特定条件下必须调用系统 git 命令,而该命令在当前执行环境里根本不可见——装没装、PATH 对不对、谁在跑、shell 是不是非交互式,四者缺一不可。
git --version 成功但 composer diagnose 仍报错?查环境隔离
这是最典型的「环境错位」:你在终端(比如 zsh)里配好了 PATH,但 composer diagnose 可能由 Web 服务(www-data)、CI runner(GitHub Actions 的默认用户)、Docker 容器或 IDE 内置终端触发,这些上下文默认不加载你的 ~/.zshrc 或 ~/.bash_profile。
- 新开一个纯净终端(关掉所有已有窗口再开),运行
git --version和which git,确认路径输出 - 立刻在同一终端运行
composer diagnose,看是否仍标WARNING - 如果仍失败,检查 shell 配置里有没有类似
[[ -n $PS1 ]] && export PATH=...这种只对交互式 shell 生效的判断 - 临时验证:直接用完整路径调用,例如
GIT_EXECUTABLE=/opt/homebrew/bin/git composer diagnose
Windows 上提示“git 不是内部或外部命令”?重装并勾选 PATH
这几乎 100% 是 Git for Windows 安装时漏选了 “Add Git to the system PATH”。GitHub Desktop、VS Code 内置 Git 都不等于系统级 git 可用。
- 检查路径是否存在:
C:\Program Files\Git\bin\git.exe或C:\Users\{user}\AppData\Local\Programs\Git\bin\git.exe - 若不存在,去
git-scm.com/download/win重新安装,安装最后一步务必勾选 “Add Git to the system PATH”(推荐选 “Use Git from Windows Command Prompt”) - 装完必须重启所有已打开的 CMD/PowerShell/IDE 终端,旧窗口不会自动加载新
PATH - 验证:在新终端中运行
where git,应输出完整路径;再跑composer diagnose看是否显示Git binary found at
不想装 Git?用 --prefer-dist 绕过,但得确认 dist 存在
--prefer-dist 能绕过 git clone,但前提是包真有可用的 dist 归档(zip/tar.gz)。Composer 不会“自动造 dist”,它只是跳过 clone 改从 dist.url 下载。私有包、dev 分支、未配置 archive 的 GitHub repo 往往没有 dist,此时会静默 fallback 回 source,然后再次失败——日志里可能只写 Failed to download vendor/package,根本不提 git。
- 验证是否生效:运行
composer install -vvv,看到Downloading https://.../package.zip才算成功;若仍有Executing command (CWD): git clone,说明某处还在 force source - 项目级锁定:运行
composer config prefer-dist true,写入composer.json的"config"段 - 全局禁用 source:运行
composer config --global preferred-install "dist",比命令行参数更彻底 - CI 场景务必加
--no-plugins --no-scripts,防止某些插件偷偷调用git
Linux/macOS 上 which git 有输出但 composer 找不到?查用户 PATH 差异
常见于 Docker 容器、Web 服务器(www-data)、CI runner 等非登录用户场景:你当前 shell 的 PATH 里有 /usr/local/bin,但 PHP 进程或容器里只有 /usr/bin:/bin。
- 在出问题的环境下直接运行
php -r "echo getenv('PATH');",对比你终端里echo $PATH的输出 - macOS Apple Silicon 用户:Homebrew 默认装在
/opt/homebrew/bin/git,需确保该路径在$PATH前置位置,并被对应用户加载(如www-data的 shell 配置) - Docker:Debian/Ubuntu 基础镜像加
RUN apt-get update && apt-get install -y git;Alpine 加RUN apk add --no-cache git - 临时解法:调用前显式指定
PATH="/usr/local/bin:/usr/bin:/bin" composer install
最容易被忽略的是缓存和 fallback 行为:Composer 的 dist 缓存(~/.composer/cache/files/)里如果存着旧的、不带 dist 信息的 composer.lock 记录,即使你改了配置,它也可能复用错误元数据——遇到诡异 fallback,先删缓存再试。











