2016-02-05 313 views
1

我最近从svn切换为git,我有点糊涂了。Yii2和Git忽略文件

在yii2框架,有很多.gitignore文件,据我所知,使用这些文件。但我是一个有点困惑的原因是vendor目录忽略。

在那里的文件,需要在两个我的开发和生产环境。

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

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

回答

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.*" 
}, 

最后一行将garante的蠢的最新稳定版本的安装ter Bootstrap 3.3.x

在请求packagist.org后,这些确切的版本均已下载,每当您从任何机器上执行composer update时,都会将其保存到供应商文件夹。如果您上传twitter引导程序3.3.2以及您的项目作为示例,并且团队成员将其下载回来而不必执行composer update,那么他可能会发现自己陷入了一个问题,该问题假设在版本3.3.3中得到修复,并且他从不需要知道他是否只是进行了更新。

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

一般建议不......

...虽然这是很有诱惑力的承诺它在某些环境下,它会导致 几个问题:

  • 大型VC库的大小,当你更新代码的diff。
  • 在您自己的VCS中复制所有依赖关系的历史记录。
  • 将通过git安装的依赖关系添加到git仓库中会将它们显示为子模块。这是有问题的,因为它们不是真正的 子模块,并且会遇到问题。

也想就如何之大,应分配给github.com如果每个项目有额外的磁盘空间与它的供应商上传。并想想在那里可以找到多少完全相同的twitter bootstrap副本。

3

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

+0

好吧,我明白你的观点,但对我来说仍然存在一些困惑。假设我要开始一个新项目,我该从哪里开始?在我的服务器(procuction)或本地机器(开发)上,然后将其推送到我的git ..现在,一旦所有东西都设置好了,并且可以说我开发了一个具有作曲者依赖关系的模块,当我推动它时,我必须在那里做一个作曲家更新,这会将相关性放在那里。但如果我在模块上工作了很长时间,并且依赖项已经更新,但我没有更新我的本地作曲者,我的服务器将有不同的版本,对不对? – user2707590

+0

我不太确定,如果我理解正确,但composer.json(dev&prod)应该是相同的。这就是为什么你也可以在版本控制下使用它。所以在完成'composer update'后,dev和prod机器应该有相同的版本。 除此之外,它只是一个建议。如果您知道这一点,让供应商文件夹在版本控制下是完全正确的。但是,编写器更新时可能会覆盖其中的代码。 –