git克隆后composer install报错主因是系统git环境异常,包括未安装、path未配置、版本低于2.10不支持tls 1.2或shallow clone参数,需升级git并正确配置path,而非绕行降级协议或换源。

Git 克隆完项目后 composer install 报错,大概率不是 Composer 本身坏了,而是它在还原 composer.lock 时触发了 Git 相关操作(比如拉 dev 分支、校验 source 提交),而系统 Git 环境没配好、版本太低或协议不匹配。直接升级 Git + 正确配置 PATH 是最稳的解法,绕开只会埋坑。
git is not recognized 或 git --version 失败
这是 Windows 最常见问题:Git 没装,或装了但没进系统 PATH。
- 打开新 CMD(不是旧窗口!),运行
git --version—— 报错就说明环境没通 - Git for Windows 安装时,必须勾选 “Git from the command line and also from 3rd-party software”,否则
git.exe不会写入 PATH - 如果已安装但
where git无输出,手动把C:\Program Files\Git\cmd加到系统 PATH,然后彻底关闭并重开终端 - macOS 别依赖 Xcode 自带的阉割版 Git;用
brew install git装完整版,并确认/opt/homebrew/bin(Apple Silicon)或/usr/local/bin(Intel)在$PATH前置位置
克隆失败:SSL certificate problem 或 fatal: unable to access
这不是网络问题,是 CentOS 7 / RHEL 7 等老系统自带 Git 1.8.x 不支持 TLS 1.2+ 导致的证书握手失败。
- 运行
git --version,若低于2.10,基本就是它 - CentOS 7 推荐用 IUS 仓库升级:
yum install https://repo.ius.io/ius-release-el7.rpm,再yum install git222 - 升级后执行
git config --global http.sslVersion tlsv1.2,强制走 TLS 1.2 - 别用
composer config -g github-protocols https降级协议——部分私有仓库会因此拒绝连接
卡在 shallow clone 或 unknown option `shallow-since'
Composer 2.x 在 --prefer-source 场景下会生成 --shallow-since 或 --filter=blob:none 参数,Git 2.10 以下版本根本不认识。
- 错误典型表现:
error: unknown option `shallow-since'或fatal: unrecognized argument: --filter=blob:none - 临时缓解可用
--no-shallow(仅 Composer 2.2+ 支持),但会拉全量历史,慢且占空间 - 根本解法:升级 Git 后,删掉
vendor/和composer.lock,再跑composer install --prefer-source - 实在不能升级 Git,退回到 Composer 1.x:
curl -sS https://getcomposer.org/installer | php -- --version=1.10.22
Git 路径被硬编码或缓存旧版本
升级 Git 后 which git 返回新路径,但 Composer 还在调用 /usr/bin/git,常见于 Docker、CI 或多版本共存环境。
- 查 Composer 实际调用的 Git:
strace -e trace=execve composer install 2>&1 | grep git(Linux) - 强制指定路径:
composer config -g bin-dir /usr/local/bin,再确保/usr/local/bin/git是新版 - 更稳妥做法:把新版 Git 目录(如
/opt/git/bin)加到$PATH最前面,并重载 shell 配置(source ~/.bashrc)或重启终端 - Dockerfile 中务必显式安装 Git 并验证:
RUN git --version && composer diagnose | grep "Git binary"
最容易被忽略的是:composer install 成功不代表能跑起来。它只管还原依赖,不检查 autoload 是否生效、PHP 扩展是否启用、或 vendor/autoload.php 是否被正确引入。出问题先看 vendor/composer/autoload_*.php 文件是否存在,再确认 composer dump-autoload 是否执行过。











