我需要为Laravel使用.gitignore吗?

5

我想知道是否有一种可接受的做法,即不完全使用.gitignore并提交所有内容,至少对于小到中等规模的项目而言。 像任何我能想象到的框架一样,Laravel有很多依赖项,因此它们被设置为在git中忽略。 这是我的默认.gitignore文件:

/vendor
/node_modules
/public/storage
Homestead.yaml
Homestead.json
.env

我知道 vendornode_modules 目录包含依赖项。 Homestead 文件是本地机器的设置,而 .env 文件包含环境设置,并且在本地和远程服务器之间不同。我不确定 storage 目录中包含什么。
当我拉取了很多依赖项(我没有好好跟踪),我的node_modulesvendor目录膨胀到1GB,有150,000个文件,我遇到了问题。我很快意识到这是一个错误,并试图回滚到先前的版本。但那当然失败了,因为这两个文件夹没有被追踪。
花了一天时间从头开始重建项目后,我现在想删除 Laravel 项目中的所有 .gitignore 文件。考虑到我只在本地使用 Git 并且不推送到实时服务器,是否将所有内容提交是个好主意?还有其他人这样做吗?

如果你只在本地使用Git,那么当你拉取时变更的来源是什么?忽略你永远不想/期望同步的配置文件是没有问题的。 - Tim Biegeleisen
2个回答

2

两部分回答。

“爆炸”问题

你提到你的供应商/ node_modules 文件夹体积激增。即使你没有将它们包含在版本控制中,如果你正确使用了 composer 和 npm(通过使用 --save 指令),所有模块都应列在 composer.json 和 package.json 中。这意味着,即使安装的库(在 vendor + node_modules 中)不在版本控制中,package.json 和 composer.json 应该在其中 - 这意味着你可以回到过去的时间,并使用您的 composer/package jsons 在那个时间点上安装软件包。

我应该...

对于这个问题的第二部分是:我是否应该在版本控制中包括供应商/ node_modules?这是一个公平的问题,并且经常被问到。我认为最终取决于你的部署意图。

你的源(github、bitbucket 等)有无限的空间,并且你想让你的部署成为简单的超级 git push 到你的生产版本吗?你可能只需提交所有内容,包括供应商库。这样,你就完全控制了上传到服务器的内容。

实际情况下,当你推送时,你可能需要运行 php artisan migrate,因此你可能需要考虑 git hooks,并且该过程变得有点更加复杂(但可以说更好/可扩展/健壮)。有了这些 hooks,你可以开始运行 composer install + npm install 以对 package.json 和 composer.json 文件进行操作(不包括完整的供应商库在 git 中)。如果你选择这条道路,你要确保你的 composer/package jsons 被很好地锁定 - 没有 '3.x.x' 版本号 - 你需要锁定版本,这样你就知道它们是有效的并且已经被测试过。


我非常喜欢你关于锁定依赖版本的观点。最近有一个依赖更新后无法工作了。幸好它是唯一的依赖,而且项目规模很小,否则我不知道该如何修复它。所以,是的,我删除了所有本地版本控制的.gitignore文件,目前一切都很顺利和简单。如果出现问题,我会更新这个问题。 - Arthur Tarasov
没问题。这真的是一个“取决于”的答案,因为它确实取决于具体情况。 - Chris

2

依赖

通常情况下,应该忽略依赖项。 (请参阅Composer文档中的FAQ)。如果您想回滚到以前的版本,只需删除vendor / node_modules文件夹,然后再次运行composer install / npm install以安装该特定提交的composer.json / package.json中的依赖项。

.env文件

对于.env文件,除了服务器之间的设置不同之外,它还包含私人信息,例如数据库凭据,因此您也应该忽略它,除非您确信不会将其推送到其他人可以看到的地方(例如公共GitHub存储库)。

存储文件夹

存储文件夹通常是保存上传文件等内容的位置,这取决于您的应用程序是否应该忽略它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接