Composer update卡在git clone时,先确认是不是缓存损坏:~/.composer/cache/vcs/下裸仓库损坏会导致静默卡住,需用git --git-dir=xxx show-ref验证,精准删除对应目录并加--no-cache重试。

Composer update卡在git clone时,先确认是不是缓存损坏
Composer 执行 update 卡在 Executing command (CWD: ): git clone 并不等于网络慢或 Git 服务器不可达——更常见的是 ~/.composer/cache/vcs/ 下某个裸仓库(bare repo)已损坏但 Composer 仍尝试复用。它不会报“corrupted”,而是静默卡住、反复重试或拉到旧 commit。
- 运行
composer update -vvv,盯住最后一行:若出现Cloning into bare repository '/path/to/cache/vcs/https---github.com-vendor-package.git/',说明它正从缓存的裸仓库拉取,而非全新克隆 - 进该路径,执行
git --git-dir=. show-ref --head;若报fatal: not a git repository或输出为空,就是裸仓库损坏 - 损坏常发生在磁盘写入中断、WSL 跨文件系统操作、或杀进程导致
git clone --mirror中断
只删 vcs/ 下对应裸仓库,别动 repo/ 和 files/
vcs/ 是唯一可能引发 git clone 卡住的缓存位置,其他目录无关。删错地方反而会拖慢后续流程。
- 定位方法:从
-vvv日志里复制完整裸仓库路径,或按包名模糊搜:ls -d ~/.composer/cache/vcs/*vendor*package*(Linux/macOS),PowerShell 用Get-ChildItem "$env:APPDATA\Composer\Cache\Vcs" -Recurse -Directory | Where-Object Name -like "*package*" - 只删匹配的整个目录,例如
rm -rf ~/.composer/cache/vcs/https---github.com-symfony-console.git -
绝对不要删
~/.composer/cache/repo/或files/——它们不参与 Git 拉取逻辑,删了反而让元数据和 ZIP 包重新下载,纯属浪费时间
删完裸仓库后必须加 --no-cache 再试
Composer 默认优先复用 vcs/ 缓存,即使你刚删掉,它也可能从 composer.lock 的 source.reference 直接 checkout 旧 commit,跳过重新 clone。不加参数,等于白删。
- 运行
composer update vendor/package --no-cache -v,确保日志里出现Cloning https://github.com/vendor/package.git(不是bare repository) - 若仍卡住,检查是否被项目级
repositories配置覆盖:运行composer config repos.packagist,确认没意外启用 packagist.org 原站(国内访问极慢) - Windows 用户注意:
--no-cache对 WSL 中的 Git 操作同样生效,但若路径在/mnt/c/下,Git 性能本身就会劣化,建议把代码移到~/原生路径
为什么 clear-cache 不解决 VCS 卡住问题
composer clear-cache 默认只清 files/ 和部分 repo/,完全不碰 vcs/。这是设计使然:VCS 缓存体积大、重建成本高,Composer 认为它“应该稳定”。但现实是,它恰恰最易损坏。
- 验证方式:执行
composer clear-cache后,立刻运行ls ~/.composer/cache/vcs/ | wc -l,数量基本不变 - 强制清空所有 VCS 缓存(慎用):
rm -rf ~/.composer/cache/vcs/*(Linux/macOS)或Remove-Item "$env:APPDATA\Composer\Cache\Vcs\*" -Recurse -Force(PowerShell) - 但更稳妥的做法是精准删除——因为多个包共用一个 Git URL 时(如都指向 github.com/laravel/framework),删整个
vcs/会让所有相关更新变慢
git --git-dir=xxx show-ref 看一眼,比盲目 clear-cache 或等十分钟更省时间。


















