Composer卡在Cloning或报错是因GitHub的Git/SSH协议被阻断或HTTPS握手超时;改composer.json的repositories无效,因镜像仅加速元数据查询,下载仍走包定义的source.url;正确做法是配置Git全局代理并启用composer config –global github-protocols https强制转HTTPS。
Composer 安装或更新时卡在 Cloning into 'xxx'... 或报错 Failed to clone https://github.com/xxx/xxx.git,大概率不是网络断了,而是 GitHub 的 Git 协议(git:// 或 ssh://[email protected])被阻断,或 HTTPS 请求因 DNS / TLS 握手慢导致超时 —— 直接配代理或换镜像源能解决,但方式不对反而会触发新问题。
为什么改 composer.json 的 repositories 不管用?
很多人在项目根目录的 composer.json 里加了国内镜像源(比如阿里、腾讯),但发现 composer install 依然连 GitHub,这是因为:
• Composer 只对「包元数据」(packagist.org 上的 name/version 列表)走镜像;
• 真正下载代码时,仍按包定义里的 source.url(通常是原始 GitHub HTTPS 或 Git 地址)拉取;
• 某些包(尤其是 "type": "vcs" 或私有仓库)甚至完全绕过 Packagist,直接克隆原始地址。
正确设置全局 Git 协议代理(推荐)
Composer 底层调用 git clone,所以最稳的方式是让系统 Git 走代理,而不是动 Composer 配置:
• 若你本地已配置好 HTTP(S) 代理(如 127.0.0.1:7890),运行:
git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890
• 如果代理需认证,写成 http://user:[email protected]:7890;
• 若只希望 Composer 走代理(不影响其他 Git 操作),去掉 --global,并在项目目录下执行(会写入 .git/config);
• 注意:Git 代理不作用于 ssh://[email protected],遇到这类地址需改用 HTTPS 方式(见下一条)。