4.4. 我应该将 vendor 目录加入版本控制吗?
优质
小牛编辑
129浏览
2023-12-01
通常情况下请不要这样做, vendor 文件夹(或者其它你依赖包所安装的位置)应该被加入 .gitignore
/svn:ignore
/......
最好的方式是让所有开发人员使用 Composer 命令来安装依赖,同样的,构建服务器,部署工具等,需要将运行 Composer 纳入工程引导的一部分。
尽管在某些情况下将其提交到版本库挺让吸引人的,但其容易带来下面几个问题:
- 当你更新代码时,版本控制仓库代码变大,diff 变得臃肿。
- 项目所有的依赖将在你版本控制中产生一份副本。
- 某些场景下 Composer 通过 git 安装的 git 仓库将被视为子模块。这是有问题的且会带来麻烦,因为它们并非真正的子模块。
如果你真的感觉你必需这么做,你有这几个选项:
- 依赖包的版本限制为打过 tag 的发布(非 dev)版本,这样的话你只会通过zipped 安装,从而避免因为 git submodule 产生问题。
- 使用 --prefer-dist 或设置
preferred-install
为dist
到你项目的 config. - 每个依赖安装后移除
.git
目录,然后再把它们添加到你的仓库中。你可以使用rm -rf vendor/**/.git
(在 ZSH 中) 或find vendor/ -type d -name ".git" -exec rm -rf {} \;
(在 Bash 中)。但这意味者下次运行 composer update 时你需要删除这些依赖。 - 添加一个 .gitignore 规则(
/vendor/**/.git
)来忽略 vendor 下的.git
目录。此方法的好处是你无需为了 composer update 而删除这些依赖。