不应将 vendor 目录提交到 Git,因其会导致仓库臃肿、干扰代码追踪、引发冲突且难以维护;正确做法是提交 composer.json 和 composer.lock 文件,通过 .gitignore 忽略 vendor,并在团队协作中统一依赖管理流程。

在使用 Composer 管理 PHP 项目依赖时,不应该将 vendor 目录提交到 Git。这样做不仅违背了版本控制系统的设计初衷,还可能带来一系列维护和协作上的问题。下面从多个角度说明原因,并介绍 Composer 与 Git 的最佳协作实践。
1. vendor 目录的作用与问题
vendor 目录是 Composer 下载并安装第三方依赖(如框架、库)的默认位置。这些依赖本身已经由各自的作者通过 Git 或其他系统进行版本管理。
如果将 vendor 提交到 Git,会带来以下问题:
- 仓库体积迅速膨胀:vendor 中包含大量外部代码,会使 Git 仓库变得臃肿,影响克隆和拉取速度。
- 难以追踪真正属于项目的代码:混入第三方代码后,diff 和 blame 操作失去意义,无法清晰看到团队成员的修改。
- 更新依赖困难:手动修改 vendor 中的文件会导致下次 composer install 被覆盖,且无法保证一致性。
- 引发冲突风险:多人协作时,若有人误改 vendor 文件并提交,容易造成合并冲突,且无实际价值。
2. 使用 composer.json 和 composer.lock 进行依赖管理
真正需要提交到 Git 的是 composer.json 和 composer.lock 两个文件。
- composer.json 定义项目所需的依赖及其版本范围。
- composer.lock 记录当前环境中所有依赖的确切版本,确保团队成员和生产环境安装完全一致的包。
只要这两个文件存在,任何人在执行 composer install 后都能还原出相同的 vendor 目录。这正是现代依赖管理的核心理念:不存结果,存声明。
3. .gitignore 中正确配置 vendor
应在项目根目录的 .gitignore 文件中添加:
vendor/
这样 Git 就不会跟踪 vendor 目录中的任何内容。如果是已有提交,需将其从 Git 中移除(但保留本地文件):
git rm -r --cached vendor/ git commit -m "Remove vendor directory from version control"
4. 团队协作与部署的最佳实践
为了确保团队和部署流程顺畅,应遵循以下做法:
- 所有开发者提交代码前运行
composer install,确保 lock 文件反映最新依赖状态。 - CI/CD 流程中自动运行
composer install(使用 --no-dev 生产环境)来构建应用。 - 不要手动修改 vendor 中的代码。如有定制需求,应 fork 原项目或使用 patch 工具管理补丁。
- 定期运行
composer update(建议在特性分支中)以升级依赖,并提交更新后的 lock 文件。
基本上就这些。让 Composer 负责依赖,Git 负责代码,各司其职,协作才更高效。










