【问题标题】:Yii2 and git ignore filesYii2 和 git 忽略文件
【发布时间】:2016-05-15 09:17:30
【问题描述】:

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

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

我的开发和生产环境都需要其中的文件。

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

每次推送时我是否需要在两个环境中运行composer update

【问题讨论】:

    标签: git svn yii2 vendor


    【解决方案1】:

    没错。通常你不会提交供应商的东西,因为那里的第 3 方代码在其他地方受版本控制。您应该使用 composer 来处理更新供应商特定的代码。这意味着每次部署应用程序时都应该运行composer update,除非您已经拥有所有供应商代码并且您需要的内容没有任何更新。

    【讨论】:

    • 好的,我明白你的意思,但我仍然有些困惑。假设我要开始一个新项目,我从哪里开始?在我的服务器(生产)或本地机器(开发)上,然后将其推送到我的 git .. 现在一切都设置好后,假设我开发了一个具有作曲家依赖项的模块,当我将其推送到产品时,我将不得不在那里进行作曲家更新,将依赖项放在那里。但是如果我在我的模块上工作了很长时间并且已经更新了依赖项但我没有更新我的本地作曲家,我的服务器会有不同的版本,对吧?
    • 我不太确定我是否理解正确,但 composer.json (dev & prod) 应该是相同的。这就是为什么您也将其置于版本控制之下的原因。因此,在执行composer update 之后,开发机器和生产机器都应该具有相同的版本。除此之外,这只是一个建议。如果您知道,将供应商文件夹置于版本控制之下是完全可以的。但是在进行作曲家更新时,那里的代码可能会被覆盖。
    【解决方案2】:

    正如@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查看它here)获取其 repo,将安装找到的最后一个稳定版本( "*" 的意思)然后将解决它的依赖关系,这可以在 \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 版本以及如果他只是进行更新,他永远不需要知道哪里。

    这就是作曲家团队回答问题时所说的:Should I commit the dependencies in my vendor directory?

    一般建议是不...

    ...虽然在某些环境中提交它可能很诱人,但它会导致 几个问题:

    • 更新代码时 VCS 存储库大小和差异。
    • 在您自己的 VCS 中复制所有依赖项的历史记录。
    • 将通过 git 安装的依赖项添加到 git 存储库会将它们显示为子模块。这是有问题的,因为它们不是真实的 子模块,你会遇到问题。

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

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2011-08-01
      • 1970-01-01
      • 2017-10-17
      相关资源
      最近更新 更多