composer clear-cache 不清理 VCS 缓存,需手动删除 ~/.composer/cache/vcs/ 下对应仓库目录,否则 composer update 仍使用旧 Git 提交;还需清理 vendor 中 symlink 和 autoload,并在 CI/CD 中禁用 VCS 源以避免问题。

为什么 composer clear-cache 对 VCS 源没用
它只清 ~/.composer/cache/files/ 和部分元数据,但 VCS 类型源(如 Git 仓库)的克隆快照存在 ~/.composer/cache/vcs/ 下,且 Composer 会直接复用这个裸仓库——哪怕你已 push 新 commit,它也不会自动 fetch。一旦缓存里有旧提交,composer update 就永远装不上本地改过的代码。
必须删掉 ~/.composer/cache/vcs/ 下对应仓库
Composer 把每个 Git URL 映射成一个 hash 目录,例如 https://gitlab.example.com/mygroup/myrepo.git 可能对应 ~/.composer/cache/vcs/https---gitlab.example.com---mygroup---myrepo.git/。不手动删它,update 就不会重新 clone 或 pull。
- 先确认你的 VCS 源地址:
composer config --list | grep repositories - 进缓存目录:
cd $(composer config --global cache-dir)/vcs(Windows PowerShell 用cd "$env:APPDATA\Composer\Cache\vcs") - 模糊搜索并删掉匹配目录:
rm -rf *myrepo*或Get-ChildItem | Where-Object Name -like "*myrepo*" | Remove-Item -Recurse
VCS 源还依赖 vendor 下 symlink 和 autoload
即使 vcs 缓存清了,vendor/vendor/package 仍可能是旧 symlink,autoload 也没更新——尤其当你改过本地包里的类名或命名空间。
- 删掉对应包目录:
rm -rf vendor/vendor/package - 重跑安装:
composer update vendor/package --no-cache - 强制重生成自动加载:
composer dump-autoload
CI/CD 或 Docker 中要禁用 VCS 源回退到 dist
很多部署环境会把 "type": "vcs" 源当成不稳定因素,直接跳过它去拉 dist 包(zip/tar),结果又回到缓存旧版。这时得在 composer.json 里显式禁用:
"config": {
"preferred-install": {"vendor/package": "dist"},
"disable-tls": false
}
或者干脆在部署脚本里临时移除 repositories 配置,让 Composer 回退到 packagist 或私有 dist 源——VCS 缓存问题在生产环境本就不该出现。











