Composer diagnose报“Git not found”不代表Git未安装,而是当前执行环境未识别到Git——常见于PATH未生效、Shell配置未加载或运行用户不一致;需在纯净终端验证git --version和which git,并确保Composer启动时继承正确PATH。

Composer diagnose 报 “Git not found” 不代表 Git 没装,而是它没在当前执行环境中被识别到——最常见原因是 PATH 未生效、Shell 配置未加载,或 Composer 运行用户与你测试的用户不一致。
git --version 成功但 diagnose 仍报错
这是典型环境错位:你在交互式终端里装了 Git、配了 PATH,但 composer diagnose 可能由另一个上下文(如 Web 服务、CI runner、Docker 容器、IDE 内置终端)触发,压根没读你的 ~/.zshrc 或 ~/.bash_profile。
- 新开一个纯净终端(不复用已有会话),运行
git --version和which git,确认路径输出 - 接着运行
composer diagnose,看是否仍标 WARNING - 如果仍失败,说明 Composer 启动时没继承该
PATH:检查是否在 shell 配置文件里用了条件判断(比如[[ -n $PS1 ]] && export PATH=...),导致非交互式 shell 跳过 - 临时验证:直接用完整路径调用,例如
GIT_EXECUTABLE=/usr/local/bin/git composer diagnose
Windows 上 “git 不是内部或外部命令”
这几乎 100% 是安装时漏选了添加到系统 PATH。Git for Windows 默认提供三个 PATH 选项,只有勾选 “Add Git to the system PATH” 才能让所有进程(包括 PHP 子进程)访问 git.exe。
在 OpenClaw 中管理 GitHub 仓库、Pull Request、Issue 与工作流。适用于审查 PR、管理 Issue、自动化 GitHub Actions、同步仓库等场景。
- 检查路径是否存在:
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 的 Homebrew Git 路径不被识别
Apple Silicon(M1/M2/M3)上 Homebrew 默认装在 /opt/homebrew/bin,而老脚本常只认 /usr/local/bin;Linux 的 git-core 包可能只装了底层工具,缺 git 元包。
- 运行
which git,看输出是不是/opt/homebrew/bin/git或/usr/bin/git - 如果是前者,编辑
~/.zshrc(macOS Catalina 及以后默认用 zsh),追加:export PATH="/opt/homebrew/bin:$PATH" - 重载配置:
source ~/.zshrc,再开新终端测试 - Ubuntu/Debian 用户别只装
git-core:sudo apt install git(它才是含git命令的元包)
CI 或 Docker 环境中 diagnose 显示 OK 但 install 失败
CI(如 GitHub Actions)和 Alpine 镜像通常不加载用户 shell 配置,composer diagnose 会“假装”一切正常,因为它只查 PHP 自身能否启动,不校验子进程能否调用 git。
- 不要依赖
diagnose判断 Git 是否可用,CI 脚本里必须显式验证:git --version || (echo "Git missing" && exit 1) - Dockerfile 中 Alpine 用户需额外装
git:apk add --no-cache git(默认镜像不含) - GitHub Actions 中,
uses: actions/checkout@v4不等于系统有 Git —— 它只是个 Action,PHP 进程仍需独立 Git 环境 - 最关键的验证动作:在 CI 脚本里加一行
composer install --dry-run -vvv 2>&1 | grep -q "Executing command.*git clone",真看到那条日志才说明 Git 被调用了
Git 路径问题本质是进程环境隔离问题,不是 Composer 故障。最易忽略的是:Web 服务器(如 Apache 的 www-data 用户)、Docker 容器、CI runner 使用的 shell 配置和权限,跟开发者本地终端完全独立——不能靠“我这边好好的”来推断线上环境。

















