我最近从svn
切换到git
,我有点困惑。
在yii2框架中,有许多.gitignore
个文件,我理解这些文件的使用。但是有点混淆为什么vendor
目录被忽略了。
我的开发和生产环境都需要那里的文件。
我曾经在使用svn
时提交文件,但我做错了吗?如果我忽略vendor
目录,那么正确的方法是什么。
每次推送时我是否需要在两个环境中运行composer update
?
答案 0 :(得分:3)
那是对的。通常你不会提交供应商的东西,因为那里的第三方代码在其他地方受版本控制。您应该使用composer来处理更新供应商特定的代码。这意味着每次部署应用程序时都应该运行composer update
,除非您已经拥有所有供应商代码,并且没有对所需内容进行任何更新。
答案 1 :(得分:1)
正如@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 (看到here )获得回复,将安装最后一个找到稳定版本("*"
意味着什么)然后将解决其在\vendor\yiisoft\yii2-bootsrap\composer.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 ,并且他永远不需要知道他是否刚刚进行了更新。
这就是Composer团队回答这个问题的原因:Should I commit the dependencies in my vendor directory?:
一般建议是否......
......虽然在某些环境中提交它可能很诱人,但它会导致 一些问题:
- 更新代码时,大型VCS存储库大小和差异。
- 在您自己的VCS中复制所有依赖项的历史记录。
- 将通过git安装的依赖项添加到git repo中会将它们显示为子模块。这是有问题的,因为它们不是真实的 子模块,你会遇到问题。
如果每个项目都必须与供应商一起上传,还要考虑应该分配给 github.com 的额外磁盘空间有多大。并想想那里可以找到多少完全相同的twitter bootstrap副本。