卡在Downloading https://xxx.patch时应调http.timeout,它控制DNS解析、TLS握手、首字节等待及整个body传输总时间,默认300秒,弱网或大patch易超时,需同步调高PHP的default_socket_timeout。

拉取补丁超时不是“补丁”本身的问题,而是 Composer 在下载 ZIP 包、执行 git clone 或解压过程中被中断——本质仍是超时配置没对上实际卡点,调错参数只会白等。
卡在 Downloading https://xxx.patch 该调 http.timeout
如果你看到日志停在 Downloading https://mirrors.aliyun.com/composer/.../xxx.zip 或类似带 .patch 后缀的 URL,说明是 HTTP 下载阶段失败。这类请求走的是 Composer 内置 HTTP 客户端(cURL),受 http.timeout 控制。
-
http.timeout管 DNS 解析 + TLS 握手 + 首字节等待 + 整个 body 传输,单位秒,默认仅300 - 国内镜像偶尔首字节延迟高,或大 patch 包(如含完整测试用例的 dist)传输慢,
300极易触发cURL error 28 - 项目级最稳:运行
composer config http.timeout 600,写入当前composer.json的config段,可提交、可复现 - 注意:
php -i | grep default_socket_timeout查出的 PHP CLIdefault_socket_timeout若低于你设的http.timeout(常见值是60),会提前掐断连接——务必同步调高
卡在 Executing command: git apply 或 unzip 该调 process-timeout
如果 -vvv 输出最后一行是 Executing command (CWD: ...): git apply ... 或 unzip -qq ...,说明已成功下载 patch,但应用或解压环节卡住。这属于子进程执行超时,和 HTTP 完全无关,只认 process-timeout。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
process-timeout控制每个外部命令(git、unzip、php脚本等)最大执行时间,默认300秒 - 某些 patch 需递归处理大量文件,或 WSL2/Docker 中 I/O 慢,
300不够用 - 全局改:运行
composer config -g process-timeout 1200(20 分钟) - 临时覆盖优先级最高:加环境变量
COMPOSER_PROCESS_TIMEOUT=1200 composer install - 设为
0表示不限时,但不推荐——万一git apply因权限/路径错误挂起,会无限等待
为什么换源后还拉 patch 超时
阿里云、腾讯等镜像只代理 Packagist 元数据(packages.json)和 dist ZIP 包,不代理 VCS(Git)仓库。若 patch 来自 "type": "git" 的包(比如 "laravel/framework": "dev-main#abc123"),Composer 会绕过镜像直连 GitHub,此时 http.timeout 失效,真正瓶颈是 git clone 和后续 git apply。
- 强制 Git 走 HTTPS(避免 SSH 认证卡住):
composer config -g github-protocols https - 给系统 Git 加超时(Linux/macOS):
git config --global core.sshCommand "timeout 300 ssh" - 检查是否硬编码了
repositories字段,导致镜像配置被忽略;运行composer config repo.packagist确认当前生效源
最常被忽略的一点:patch 拉取失败未必是网络问题。如果 Generating autoload files 后无响应,其实是文件系统扫描卡住(尤其 WSL2 下 symlink 解析慢),跟 timeout 参数完全无关——这时候调再大的 process-timeout 也没用。

















