我应该将 Laravel 供应商目录添加到 .gitignore 吗?

Posted

技术标签:

【中文标题】我应该将 Laravel 供应商目录添加到 .gitignore 吗?【英文标题】:Should I add Laravel vendor directory to .gitignore or not? 【发布时间】:2017-01-04 15:32:50 【问题描述】:

我的供应商目录位于.gitignore 文件中。 每次我运行 composer update 时,git 都无法跟踪 vendor 目录的更新和更改,因此我无法回退这些更改!

我的问题是:composer update 之后是否有可能应用程序崩溃或遇到错误,所以需要git reset

如果可能的话,从.gitignore 中删除供应商目录不是更好吗? 也许这个问题还有其他解决方案? (如果这是一个问题!!)

【问题讨论】:

您为什么要尝试从我的答案中编辑“旁注:composer dump-autoload 不应对供应商进行任何破坏性更改”?你认为这在某些方面是不正确的吗? 嗨!你在哪里对composer dump-autoload !我注意到这是我的问题中的一个错误,所以我编辑了我的问题:(将composer dump-autoload 更改为composer update)。在那之后,你的旁注就没有意义了!所以我建议进行编辑。 (对我的编辑有评论。你可能没有注意到) 【参考方案1】:

vendor 目录默认在.gitignore。这是一个好主意,因为composer 将随时在任何机器上为您安装在composer.json 中找到的所有软件包。如果您在使用某个软件包的新版本时遇到问题,只需将其改回 composer.json 并再次运行 composer update

当然,您可以从 .gitignore 中删除 vendor 目录,但这会减慢提交速度,并会占用更多磁盘和 GitHub/BitBucket 空间等。

【讨论】:

谢谢!我没有注意到git commit 减速部分。但包依赖项和版本不仅在主 composer.json 文件中。每个vendor 包都有一个composer.json 文件和其他依赖项。跟踪有问题的包并更改其版本是否容易? @AhmadMobaraki,composer.jsoncomposer.lock 文件都将由 git 提交。 @AlexeyMezenin composer.lock 包含确切的版本。当团队成员执行composer update(或添加新包,或删除包等)时,他们测试、提交更新的composer.lock 到repo,团队的其他成员执行composer install获取新的软件包版本。 "但这会减慢提交速度,并会使用更多的磁盘和 GitHub/BitBucket 空间等。"供应商目录压缩了几兆,它不会增加任何严重的提交时间或磁盘空间。不包括供应商目录还有其他原因,但我认为这两个在当今时代并不适用。就个人而言,我包括了供应商目录,因为它使部署和一致性更容易,这对我来说比小提交大小或项目上额外一秒钟的上传/下载要高得多。回滚/版本检查也更加一致。 我们实际上在 AWS 上运行 laravel/nova 无服务器,我可以告诉你,上传大小在那里绝对很重要。【参考方案2】:

Composer 为此提供了composer.lock 文件。

安装新包、执行composer update 等导致包更改的操作会将已安装包的确切版本写入composer.lock。您应该将此文件包含在存储库的版本控制文件中。

您可以运行composer install 以自动安装来自composer.lock 的软件包版本的确切列表。由于它将进行版本控制,您始终可以将其回滚到工作版本并再次运行 composer install

旁注:composer dump-autoload 不应对vendor 进行任何破坏性更改。

【讨论】:

以上是关于我应该将 Laravel 供应商目录添加到 .gitignore 吗?的主要内容,如果未能解决你的问题,请参考以下文章

运行一个简单的 Laravel 应用程序时,我需要大的供应商目录吗?

如何防止 Laravel 应用程序文件夹被搜索引擎索引

Git - 供应商文件夹修改 - .gitignore?

使用 Laravel 和 ajax 保存多维数组

将 laravel 5.8 升级到 6:致命错误:未捕获的 RuntimeException:尚未设置外观根

带有 Laravel Sail 和版本控制的 Laravel 8 开发项目