是,composer clear-cache会清掉VCS缓存;它默认全量清理~/.composer/cache/目录,包括vcs/子目录,下次需要时Composer会自动重建裸仓库,安全但首次重拉可能变慢。

composer clear-cache 会清掉 VCS 缓存吗?
会,但不是单独控制——composer clear-cache(等价于 composer cache-clear)默认清理整个 ~/.composer/cache/ 目录,包括 vcs/ 子目录。它不区分类型,属于全量操作。
- 这个行为是安全的:下次需要拉取 Git 仓库时,Composer 会自动重建裸仓库(bare clone),速度比首次慢一点,但不会出错
- 如果你刚执行过
composer update且依赖了大量私有 Git 包,vcs/下可能有几十 MB 到几 GB 的缓存,清掉后首次重拉会明显变慢 - 不建议在 CI/CD 流水线里频繁运行
clear-cache,尤其当镜像源或私有 Git 服务响应较慢时,容易拖长构建时间
只想清 VCS 缓存,不碰 repo/files 怎么办?
直接删 vcs/ 目录最稳妥,无需依赖 Composer 命令:
- 先确认路径:
composer config --global cache-dir - Linux/macOS 执行:
rm -rf $(composer config --global cache-dir)/vcs - Windows 手动进
%APPDATA%\Composer\Cache\vcs删除整个文件夹
注意:
-
vcs/下内容全是 Git 裸仓库,没有项目代码,删完不影响任何已安装的包 - 不要同时运行
composer install或update,否则可能因锁文件冲突报Corrupted cache file - 某些私有 Git 仓库若启用了 SSH Agent 转发或 token 失效,重建裸仓库时可能卡住,建议提前验证凭证可用性
为什么 composer clear-cache 有时没清掉 vcs/?
常见原因不是命令失效,而是路径或权限错位:
- 你设置了
COMPOSER_CACHE_DIR环境变量,但当前 shell 没加载,clear-cache实际清的是空路径或旧路径 - 之前用
sudo composer install写入过vcs/,现在普通用户执行clear-cache权限不足,删不掉文件(Linux/macOS 下表现为“Permission denied”,Windows 下可能静默失败) - Docker 容器中反复切换用户(如 root → www-data),导致
vcs/目录属主混乱,clear-cache跳过无法写入的子目录
验证是否真清掉了:ls -la $(composer config --global cache-dir)/vcs,输出为空或提示 “No such file or directory” 才算成功。
其他常用缓存清理命令对比
-
composer clear-cache:全量清,含 vcs/、repo/、files/、archives/;推荐每月一次或磁盘告警时用
-
rm -rf ~/.composer/cache/files:只清下载的 ZIP/TAR 包,省最多空间(常占缓存 70%+)
-
rm -rf ~/.composer/cache/repo:只清元数据,解决“明明新版本发布了却装不到”的问题
-
composer self-update:不清理,但新版 Composer(≥2.5)对 vcs/ 缓存复用更激进,长期看比频繁清理更稳
composer clear-cache:全量清,含 vcs/、repo/、files/、archives/;推荐每月一次或磁盘告警时用 rm -rf ~/.composer/cache/files:只清下载的 ZIP/TAR 包,省最多空间(常占缓存 70%+) rm -rf ~/.composer/cache/repo:只清元数据,解决“明明新版本发布了却装不到”的问题 composer self-update:不清理,但新版 Composer(≥2.5)对 vcs/ 缓存复用更激进,长期看比频繁清理更稳 真正容易被忽略的是:VCS 缓存本身不占大头,但和 files/ 绑定紧密——比如你删了 vcs/ 却留着 files/ 里的旧 ZIP,Composer 可能跳过重新克隆,直接解压旧包,导致实际行为和预期不符。











