应使用 composer config -g default-protocol https 全局强制所有 VCS 仓库默认走 HTTPS;该设置优先级高于 github-protocols,适用于 GitHub、GitLab 等所有平台,但需确保私有仓库支持 HTTPS。

composer config 设置全局下载协议为 https
默认情况下,Composer 会优先使用 git 协议克隆仓库(如 git@github.com:vendor/package.git),但很多内网或受限网络环境无法走 SSH,导致 composer install 卡在 “Cloning failed” 或报错 Permission denied (publickey)。这时应强制 Composer 改用 https 协议拉取源码。
执行以下命令即可全局生效:
composer config -g github-protocols https
该配置会写入全局 auth.json(通常位于 ~/.composer/auth.json)中的 github-protocols 字段,告诉 Composer 对所有 GitHub 仓库都尝试用 HTTPS 克隆。
- 仅影响 GitHub 官方域名(
github.com),不影响 GitLab、Bitbucket 等其他平台 - 如果项目中已通过
repositories显式定义了git类型 URL,此设置不覆盖它 - 若同时设了
gitlab-protocols或自定义域名协议,需单独配置
修改 default-protocol 影响所有 VCS 类型仓库
想让所有 Git/Svn/Hg 仓库(不限平台)默认走 HTTPS?用 default-protocol 更彻底:
composer config -g default-protocol https
这个设置会作用于所有未显式指定协议的 VCS 地址,比如 vendor/package 被解析为 https://github.com/vendor/package.git 而非 git@github.com:vendor/package.git。
- 适用于企业私有 Git 服务器也支持 HTTPS 的场景
- 某些老旧私有 Git 服务只支持 SSH,启用后会导致 clone 失败,务必提前验证
- 该值可选
ssh/https/git/http,但http不推荐(无认证、易被劫持)
项目级 config 覆盖全局设置
某些项目必须用 SSH(例如依赖私有 submodule 且只开放了 SSH 权限),可在项目根目录运行:
composer config github-protocols ssh
这条命令写入当前项目的 composer.json 的 config 段,优先级高于全局配置。
- 不会修改
auth.json,只改composer.json - 提交该变更后,团队成员执行
composer install会自动沿用此协议偏好 - 若同时存在
default-protocol和github-protocols,后者对 GitHub 仓库有更高优先级
验证配置是否生效及常见失效原因
运行以下命令查看当前生效的全部 config:
composer config -g -l
重点关注输出中是否有 github-protocols 或 default-protocol 行。若没看到,说明没设成功;若看到但依然走 SSH,可能是:
- 项目
composer.json中repositories显式写了git@...地址,直接绕过协议协商 - 用了旧版 Composer(^2.5 以上
- 系统级 Git 配置(
git config --global url."https://".insteadOf git@)与 Composer 冲突,优先级更高
协议偏好只是“协商起点”,最终用什么协议取决于包元数据、镜像源配置和网络可达性——这点最容易被忽略。










