必须在仓库对象内显式添加"secure-http": false字段才能启用http协议,且需执行composer clear-cache;该设置为仓库级开关,全局配置无效,git协议重写须通过git config insteadof实现。

必须在 repositories 数组中为该仓库显式声明 secure-http 和协议类型,否则 Composer 会按全局策略拦截或降级失败。
如何让某个仓库走 HTTP(仅限可信内网)
Composer 2.0+ 默认拒绝任何 HTTP 仓库,哪怕你已在 composer.json 里写了 "url": "http://my-mirror.local",也会报错:The "http://my-mirror.local" repository has a non-HTTPS URL, which is not allowed by default。
解决方法是:在该仓库对象内直接加 "secure-http": false 字段:
{
"repositories": [
{
"type": "composer",
"url": "http://my-mirror.local",
"secure-http": false
}
]
}
-
secure-http是仓库级开关,不能靠composer config -g secure-http false全局覆盖——该命令在 Composer ≥2.2 已被忽略 - 改完必须执行
composer clear-cache,否则旧的 HTTPS 缓存元数据仍可能被复用 - HTTP 镜像若需认证(如 Basic Auth),得额外配
http-basic,且证书校验完全跳过,不推荐用于公网环境
如何让某个 Git 仓库强制走 HTTPS(绕过 SSH)
如果你在 repositories 里写的是 "git@github.com:org/repo.git",但 CI 环境不支持 SSH,不能只把 URL 改成 "https://github.com/org/repo.git"——这会导致私有仓库 401 或 submodule 失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
正确做法是:保留原 git@ 地址,靠 Git 层重写协议:
- 运行
git config --global url."https://github.com/".insteadOf "git@github.com:" - 对 GitLab 同理:
git config --global url."https://gitlab.com/".insteadOf "git@gitlab.com:" - 该配置生效于
git clone阶段,与 Composer 的secure-http无关,也不影响default-protocol - 若目标仓库启用了 2FA,需用 Personal Access Token 替代密码,填入
auth.json的http-basic段
为什么 default-protocol 对已声明的仓库无效
composer config -g default-protocol https 只影响 Composer 自动推导的地址(例如从 vendor/package 解析出的源),对 repositories 中显式写出的 URL 完全不生效。
- 比如你写了
"url": "git@company.git:foo/bar",即使设了default-protocol,Composer 仍会走 SSH - 同理,
github-protocols也只作用于未显式指定协议的 GitHub 包,不覆盖repositories条目 - 想统一控制所有 Git 拉取行为,唯一可靠路径是 Git 的
insteadOf配置,而非 Composer 层参数
真正容易被忽略的是:仓库协议选择不是单点配置问题,而是 Composer(元数据层)、Git(克隆层)、PHP/cURL(传输层)三层叠加的结果。改错一层,就可能看到“连接被拒绝”“证书错误”“权限 denied”等不同阶段的报错,得顺着执行链逐层确认。










