我应该将 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.json
和 composer.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 应用程序时,我需要大的供应商目录吗?