我最近从svn
切换到git
,我有点困惑。
在 yii2 框架中,有很多.gitignore
文件,我了解这些文件的用法。 但我有点困惑为什么忽略vendor
目录。
我的开发和生产环境中都需要其中的文件。
我曾经在使用svn
时提交其中的文件,但我做错了吗?如果我忽略vendor
目录,正确的方法是什么。
每次推送时,我是否需要在两个环境中运行composer update
?
错。通常你不会提交供应商的东西,因为那是那里的第三方代码,在其他地方受到版本控制。您应该使用作曲家来处理供应商特定代码的更新。这意味着每次部署应用程序时,都应该运行composer update
,除非您已经拥有所有供应商代码并且对所需内容没有任何更新。
正如@chris---所说,这毕竟只是一个建议,是否上传和维护供应商库取决于您的选择。要了解它是如何工作的,请转到应用程序内部的composer.json
,您将看到如下所示的内容:
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": ">=2.0.6",
"yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-swiftmailer": "*"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",
"yiisoft/yii2-debug": "*",
"yiisoft/yii2-gii": "*",
"yiisoft/yii2-faker": "*"
},
如果需要,您可以在其中编辑和设置任何库的特定版本。现在采取这一行:
"yiisoft/yii2-bootstrap": "*"
每次你这样做composer update
作曲家都会从 packagist.org 获取它的存储库(在这里看到它(,将安装找到的最后一个稳定版本("*"
的意思(,然后解决它的依赖关系,可以在vendoryiisoftyii2-bootsrapcomposer.json
中看到:
"require": {
"yiisoft/yii2": ">=2.0.6",
"bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*"
},
最后一行将确保安装Twitter Bootstrap 3.3.x的最后一个稳定版本。
这些是确切的库,它们的确切版本在请求 packagist.org 后下载,并在每次从任何机器composer update
时保存到供应商文件夹中。如果您上传 twitter bootstrap 3.3.2 以及您的项目作为示例,并且团队成员无需执行composer update
即可将其下载回来,那么他可能会发现自己陷入了一个问题,该问题应该在 3.3.3 版本中修复,并且他永远不需要知道他是否只是进行了更新。
这就是作曲家团队所说的回答这个问题:我应该在我的供应商目录中提交依赖项吗?
一般建议不...
。虽然在某些环境中提交它可能很诱人,但它会导致 几个问题:
- 更新代码时较大的 VCS 存储库大小和差异。
- 在您自己的 VCS 中复制所有依赖项的历史记录。
- 将通过 git 安装的依赖项添加到 git 存储库会将它们显示为子模块。这是有问题的,因为它们不是真实的 子模块,您会遇到问题。
还要考虑如果每个项目都必须与其供应商一起上传,应该分配给 github.com 的额外磁盘空间有多大。想想那里可以找到多少完全相同的Twitter引导副本。