Yii2 和 git 忽略文件

Yii2 and git ignore files

我最近从 svn 切换到 git,我有点困惑。

在yii2框架中,有很多.gitignore个文件,我了解这些文件的用途。但我有点困惑为什么 vendor 目录被忽略了。

我的开发环境和生产环境都需要里面的文件。

我曾经在使用 svn 时提交过那里的文件,但我做错了吗?如果我忽略 vendor 目录,正确的方法是什么。

我每次推送时都需要运行 composer update吗?

没错。通常你不会提交供应商的东西,因为那里是第 3 方代码,在其他地方受版本控制。您应该使用 composer 来处理更新供应商特定代码。这意味着您每次部署应用程序时都应该 运行 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 Composer 只会从 packagist.org 获取其 repo(查看 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? :

The general recommendation is no...

...While it can be tempting to commit it in some environment, it leads to a few problems:

  • Large VCS repository size and diffs when you update code.
  • Duplication of the history of all your dependencies in your own VCS.
  • Adding dependencies installed via git to a git repo will show them as submodules. This is problematic because they are not real submodules, and you will run into issues.

还要考虑如果每个项目都必须与其供应商一起上传,应该分配给 github.com 的额外磁盘 space 有多大。想想有多少完全相同的推特副本 bootstrap 可以在那里找到。