composer clear-cache 不清除 VCS 缓存因缓存分两层:全局下载缓存(被清除)和 VCS 克隆缓存(未被清除),后者是 Git clone 的本地镜像,需手动或通过禁用再重建方式清理。

为什么 composer clear-cache 不会清除 VCS 包缓存
因为 Composer 的缓存分两层:全局下载缓存(~/.composer/cache/files/)和 VCS 克隆缓存(~/.composer/cache/vcs/)。composer clear-cache 只清前者,后者是 Git clone 的本地镜像,用于加速 require 时的安装,但不会被自动清理。
如何定位并删除单个 VCS 包的缓存目录
VCS 缓存按源地址哈希命名,直接删错目录可能影响其他包。必须先确认目标包的真实缓存路径:
- 运行
composer show vendor/package-name查看其 source type 和 URL(如git@github.com:vendor/repo.git或https://github.com/vendor/repo.git) - 进入
~/.composer/cache/vcs/,找到与该 URL 对应的子目录(名称类似github.com-vendor-repo.git/或哈希前缀目录) - 若不确定,可临时用
ls -lt | head -5看最近修改的目录,再用cat packages.json | grep -A2 "url"验证内容
安全删除 VCS 缓存的推荐方式
不建议手动 rm -rf,容易误删。更稳妥的做法是让 Composer 自己重建:
- 执行
composer config --global cache-vcs-dir ""临时禁用 VCS 缓存(不影响文件缓存) - 运行
composer update vendor/package-name --no-cache,强制跳过所有缓存,重新 clone - 再执行
composer config --global --unset cache-vcs-dir恢复默认行为 - 此时旧缓存目录已无引用,可手动
rm -rf ~/.composer/cache/vcs/github.com-vendor-repo.git(确认无其他包共用)
注意点:VCS 缓存不是“按包名”隔离的
同一个 Git 仓库 URL,无论你在多个 composer.json 中 require 多少次不同分支或版本,都共享一个 VCS 缓存目录。所以删之前得确认:这个 URL 是否被其他项目、其他包依赖——尤其当 URL 是私有 GitLab/GitHub Enterprise 地址,或用了 SSH 别名时,路径匹配可能不直观。


















