不要把 vendor 目录提交进 git 仓库。它非必要且易引发冲突、膨胀体积、污染历史、导致依赖不一致;应依赖 composer.lock 实现可重现安装,并通过 git rm -r --cached vendor 清除已误提交的缓存。

vendor 目录不该提交到 Git
直接结论:不要把 vendor 目录提交进 Git 仓库。它既没必要,又容易引发冲突、膨胀仓库体积、污染历史,还可能引入不一致的依赖快照。
Composer 的设计哲学是“声明式依赖”:你只管写好 composer.json 和锁死的 composer.lock,其余由 composer install 在各环境还原。提交 vendor 就等于绕过这套机制,相当于把“结果”当“源码”管——这和提交 node_modules 或 target/ 是同类错误。
-
composer.lock已精确记录每个包的版本、哈希与嵌套依赖树,足以保证可重现安装 - 不同系统(Linux/macOS/Windows)下部分扩展包编译产物不同,
vendor提交后极易导致“本地能跑,CI 报错” - 大体积包(如
symfony/symfony全量或某些带二进制的包)会让 clone 速度变慢、Git LFS 也救不了
gitignore 里必须有 vendor
确保项目根目录下的 .gitignore 包含这一行:
vendor/
注意末尾斜杠,表示忽略整个目录而非同名文件;也别写成 /vendor/(开头斜杠会限制为根目录下才生效,而有些项目可能嵌套在子目录中)。
常见疏漏点:
- 团队成员手动运行过
composer update后忘了删vendor,再git add .就可能误提交 - 用 IDE 新建项目时自动生成的
.gitignore没覆盖 Composer 场景(比如 PhpStorm 默认不加vendor/) - 已有仓库误提交过
vendor,光加.gitignore不够,得用git rm -r --cached vendor清除 Git 缓存
部署时靠 composer install 不靠 git pull vendor
线上部署脚本或 CI 流水线里,正确流程是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 拉取代码(不含
vendor) - 执行
composer install --no-dev --optimize-autoloader - 而不是试图从 Git 拉出一个现成的
vendor目录
关键参数说明:
-
--no-dev:跳过require-dev中的包(如 PHPUnit、PHPStan),减小生产环境体积并避免安全风险 -
--optimize-autoloader:生成扁平化类映射,提升自动加载性能(尤其对 PSR-4 大量命名空间时明显) - 必须确保
composer.lock已提交——否则install会退化为update,失去版本锁定意义
例外情况极少,别找借口
有人说“内网没外网,没法 install”,那该做的是搭建私有 Packagist 镜像或离线 ZIP 包仓库,不是把 vendor 塞进 Git。
还有人说“想 diff 第三方代码改了啥”,这属于调试手段,应临时操作,而非固化进版本管理流程。真要审计,用 composer show -t vendor/package 或查 vendor/vendor/package/.git 更可靠。
真正需要“带 vendor 的快照”的场景(比如某次紧急热修必须锁定某次手工 patch 后的状态),应该打 tag + 单独归档 ZIP,而不是污染主干 Git 历史。
记住:vendor 是构建产物,不是源码。把它放进 Git,就像把 php -S 起的服务进程 dump 成文件提交一样,违背工具链基本分工。










