Composer默认跳过vcs/目录清理,因其误判Git裸仓库可能复用,实则单个包占300–800 MB且生成海量小文件,是磁盘空间告警主因;需手动清空或全局禁用cache.vcs false。

为什么composer clear-cache不删vcs/目录
Composer 默认跳过 vcs/ 目录,因为它认为 Git 克隆缓存可能被复用——但实际开发中几乎不会复用。这个目录存的是完整 Git 裸仓库(含所有历史 commit、refs、objects),单个包就占 300–800 MB,还生成上万小文件,是 No space left on device 的高频元凶。
执行 composer clear-cache 后磁盘空间没变化?八成就是它在作怪。命令输出里压根不会提 vcs/,也不会报错,安静地绕开。
手动清空 vcs/ 是安全且推荐的操作
vcs/ 缓存重建成本极低:下次 composer install --prefer-source 或更新私有 VCS 包时,会自动重新 git clone --bare,不影响项目运行或锁文件一致性。
- Linux/macOS:
rm -rf $(composer config --global cache-dir)/vcs/* - Windows:
rd /s /q "%APPDATA%\Composer\Cache\vcs" - 清之前先停掉所有
composer进程(ps aux | grep composer或tasklist | findstr composer),否则可能触发Corrupted cache file - 别碰
repo/packagist.org/—— 删了会导致首次composer update卡很久
如何禁用 Git 缓存,从源头避免问题
如果你不需要源码模式(比如不用 --prefer-source、不调试包源码、不 fork 私有包),直接关掉 VCS 缓存最省事:
- 全局禁用:
composer config --global cache.vcs false - 效果:后续所有包强制走
--prefer-dist,只下 ZIP,不再克隆 Git 仓库 - 验证是否生效:
composer config --global cache.vcs应输出false - 注意:已有
vcs/内容不会自动删除,仍需手动清一次
CI/CD 或多项目环境下怎么批量清理
在 GitHub Actions、GitLab CI 或 Docker 构建中,vcs/ 往往堆积多年未用的私有仓库镜像,建议在构建前加一步:
- 加
--no-interaction防卡住:composer clear-cache --no-interaction - 再补一手清
vcs:rm -rf $(composer config --global cache-dir)/vcs(Linux/macOS) - Windows CI 用 PowerShell:
Remove-Item -Recurse -Force "$env:APPDATA\Composer\Cache\vcs" - 如果缓存挂 NFS 或自定义路径,务必先用
composer config --global cache-dir确认真实位置,别硬写死~/.composer/cache
vcs/ 后第一次拉私有包,会明显变慢——这不是失败,是它在重建裸仓库。只要网络通、Git URL 正确,等几秒就行。


















