composer clear-cache不删VCS缓存是设计使然,因其重建成本低、复用价值高;需手动执行rm -rf ~/.composer/cache/vcs/(Linux/macOS)或对应Windows命令彻底清理,删后首次拉取会自动重建裸仓库。

为什么composer clear-cache不删VCS缓存?
它只清files/和repo/,但vcs/目录(Git裸仓库快照)被明确排除在外。这是设计使然:Composer认为VCS缓存重建成本低、复用价值高,所以默认跳过。结果就是你改了私有Git包的tag或分支,composer update仍拉旧提交——因为~/.composer/cache/vcs/里那个裸仓库根本没动。
怎么安全删掉整个VCS缓存?
直接删目录最可靠,比依赖命令更彻底:
- Linux/macOS:
rm -rf ~/.composer/cache/vcs/ - Windows CMD:
rmdir /s /q "%APPDATA%\Composer\Cache\vcs" - Windows PowerShell:
Remove-Item -Recurse -Force "$env:APPDATA\Composer\Cache\vcs"
删完不影响正常使用:下次composer install遇到path或git类型包时,会自动重新git clone --bare,速度比下载zip还快。注意别在composer install运行中删,否则可能触发Corrupted cache file错误。
只清某个私有Git仓库的缓存?
不用全盘删,按URL哈希精准定位:
- 先查你的私有源地址:
composer config --list | grep repositories - 把
https://gitlab.example.com转成缓存路径名:https---gitlab.example.com(协议双横线+域名连字符) - 执行:
rm -rf ~/.composer/cache/vcs/https---gitlab.example.com
这个操作对CI/CD特别有用——部署脚本里可以只清当前项目关联的私有源,保留公共包的VCS缓存,省下几秒冷启动时间。
VCS缓存删完还拉不到新代码?检查这三点
常见漏点比缓存本身更致命:
-
composer.lock没更新:旧lock文件锁死commit hash,删完VCS缓存也无用,必须composer update vendor/package --no-cache - 本地包用了
path仓库但repositories配置被项目级composer.json覆盖,导致根本没走VCS流程 - Git服务器返回了304 Not Modified响应,Composer误判“没变”,加
--no-cache强制重请求元数据
VCS缓存本身几乎不会损坏,但它的存在会让Composer跳过网络校验——所以真正要盯紧的,永远是composer.lock和repositories配置是否与预期一致。


















