vendor目录中存在.git/.github等隐藏文件是因为包作者打包时未清理干净,composer默认不解压过滤;应通过composer-archive-excludes插件配合config.archive.excludes配置(如["/.git/","/.github/"])在解压阶段剔除,或使用--remove-vcs参数兜底清理,且需先rm -rf vendor再重装。

vendor 目录里为什么会有 .git/.github/ 这类隐藏文件
这些隐藏文件不是 Composer 主动加的,而是上游包作者打包时塞进 dist zip 包里的——比如某些包用 git archive 打包没清理干净,或 CI 脚本漏掉了 --no-git-dir。Composer 默认不解压时过滤它们,所以 .git、.github、.gitignore 就原样落进 vendor/ 了。
用 archive.excludes 在解压阶段直接剔除
这是最干净的做法:不等文件落地,就在 unzip 时跳过指定路径。必须配合插件和配置生效:
- 先运行
composer require --dev composer-archive-excludes - 在
composer.json的config.archive.excludes下添加路径,例如:"archive": { "excludes": ["/.git/", "/.github/", "/.gitignore", "/.editorconfig"] } - 删掉
vendor/并重跑composer install --prefer-dist—— 旧包不会被清理,只有新安装的包才受此规则约束
别用 find + rm -rf 清理已存在的隐藏文件
手动删 .git 目录看似快,但有三个坑:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
autoload_classmap.php可能还记着.git/下某个测试脚本的路径,删完反而触发Class not found - 某些包(如
phpunit/phpunit)的bin/脚本依赖.git/里的 commit hash 生成版本号,删了会导致命令报错 - 下次
composer update或install会重新拉取带.git的 zip,又回来了
生产环境部署时补上 --remove-vcs 参数
--remove-vcs 是 Composer 内置开关,专为清理 dist 包里残留的 VCS 目录设计,比正则排除更底层、更可靠:
- 它在解压后、写入前执行,确保
.git/目录根本不会出现在vendor/中 - 和
--prefer-dist搭配使用才生效,单独用无效 - CI 部署建议固定组合:
composer install --no-dev --prefer-dist --remove-vcs --optimize-autoloader --classmap-authoritative
真正麻烦的不是隐藏文件本身,而是它们混在 autoload 映射里却没被清除——删目录容易,清映射难。只要 vendor/composer/autoload_*.php 里还留着 .git 相关路径,就永远存在加载风险。










