必须不提交 vendor 目录,因它破坏语义化版本控制、引发平台冲突、拖慢 git 且干扰 ci/cd;composer.lock 必须提交以保证依赖一致性。

不要提交 vendor 目录到 Git。这是 PHP 项目协作和部署的底线规则,不是建议,是必须遵守的实践。
为什么 composer install 不能替代 git commit vendor
很多人误以为“把 vendor 提交上去,别人拉代码就不用再装依赖了”,这反而会破坏 Composer 的语义化版本控制机制:
-
composer.json和composer.lock共同定义了可复现的依赖状态;vendor只是产物,不是源码 - 不同系统(Linux/macOS/Windows)下某些扩展包可能生成平台相关文件(如
ext-redis编译产物),直接提交会导致冲突或运行失败 -
vendor体积大、变更频繁,会严重拖慢git clone和git status,且毫无审查价值 - CI/CD 流程依赖
composer install --no-dev等精确控制,硬塞进vendor会让构建逻辑失效
.gitignore 必须包含的几行
确保项目根目录下的 .gitignore 明确排除依赖目录和缓存文件:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
vendor/ composer.lock *.log .phpunit.result.cache
注意:composer.lock 必须提交,它锁定了所有依赖的确切版本(含嵌套依赖),是多人协作和生产环境一致性的关键。漏掉它,composer install 就会按 composer.json 最新兼容范围重算,极易引发“在我机器上能跑”的故障。
遇到 Class not found 却有 vendor 目录?先查这三件事
即使你没提交 vendor,上线后仍报错,大概率不是“该不该提交”的问题,而是本地与目标环境不一致:
- 执行的是
composer install还是composer update?后者会改写composer.lock,跳过锁定版本 - PHP 版本是否匹配?比如
laravel/framework ^10.0要求 PHP >=8.1,低版本环境下install会静默降级或失败 - 是否遗漏了
--optimize-autoloader或--classmap-authoritative?尤其在生产环境,未优化的自动加载可能找不到刚安装的类
真正麻烦的从来不是“要不要提交 vendor”,而是团队里有人手动改了 vendor 里的某行代码又忘了提 PR,或者把 composer.lock 当垃圾删了——这些才是线上事故最常藏身的地方。










