私有包下载超时本质是git clone进程被卡住,process-timeout默认300秒过短,而http.timeout对其无效;需同步调高process-timeout至1800秒、配置Git层超时(如sshCommand timeout 300)、清理残留vendor目录及凭据。

私有包下载超时,本质是 Composer 在拉取 git 类仓库(如 GitHub 私有库、GitLab 企业版、自建 Gitee)时,git clone 进程被卡住,而默认的 process-timeout 又太短——不是改 http.timeout 就能解决的。
为什么改 http.timeout 对私有 Git 包无效
http.timeout 只管 HTTP 请求(比如拉 packages.json 或 ZIP dist 包),但私有包若声明为 "type": "git" 或没提供 dist 字段,Composer 会直接调用系统 git clone,完全绕过 HTTP 下载流程。此时超时由两层控制:
-
process-timeout:Composer 自身对每个外部命令(含git clone)的最大容忍时间,默认仅 300 秒 -
git自身的网络行为:比如 DNS 解析慢、SSH 握手卡顿、HTTPS 证书验证延迟,这些都可能让git clone在无输出状态下挂起,直到被process-timeout杀掉
必须同时调高 process-timeout 和 Git 层超时
只改 Composer 配置不够,Git 命令本身也要设限,否则它可能在底层无限等待:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局提高 Composer 限制:
composer config -g process-timeout 1800(建议 1800 秒,即 30 分钟) - 给 Git 加超时(Linux/macOS):
git config --global core.sshCommand "timeout 300 ssh"(SSH 场景) - 或强制 Git 走 HTTPS 并设连接/读取超时:
git config --global http.postBuffer 524288000+git config --global http.lowSpeedLimit 0+git config --global http.lowSpeedTime 0(慎用,仅调试) - 临时覆盖更可靠:
COMPOSER_PROCESS_TIMEOUT=2000 git clone https://xxx.git(先手动试 clone 看是否真卡)
私有源场景下镜像配置会失效
阿里云、腾讯等镜像只代理 Packagist 公共包,对 repositories 里显式写的私有 Git 地址(如 "url": "git@github.com:myorg/private-lib.git")完全不生效。这时:
- 别指望
repo.packagist配置能加速私有包 - 确认你用的是 HTTPS 还是 SSH:如果走 SSH,确保
~/.ssh/config里有对应 Host 配置且ssh -T git@github.com能通 - 公司内网私有 GitLab?必须配好
http.proxy:composer config -g http.proxy http://your-proxy:8080 - 检查
composer.json中repositories的url是否拼错,或是否漏了.git后缀(某些版本会静默失败)
中断后残留状态比超时本身更麻烦
一旦 git clone 半途失败,Composer 会在 vendor/ 下留下空目录、破损的 .git 文件夹或锁文件,下次运行仍会卡在同一个位置:
- 不要直接
rm -rf vendor/——这会让后续composer dump-autoload报错 - 精准清理:
rm -rf vendor/myorg/private-lib+rm -f vendor/autoload.php - 再执行:
composer dump-autoload→composer install --no-scripts(跳过可能卡住的脚本) - 若仍报
Failed to clone,说明本地 Git 缓存或凭证已坏,运行:git credential reject <<EOF\nprotocol=https\nhost=github.com\nEOF清理凭据
真正卡住你的,往往不是“要等多久”,而是那个没删干净的半成品 vendor/myorg/private-lib/.git/objects/pack/ 目录——它不会报错,但会让所有后续 clone 操作反复校验失败。

















