cen*_*ob8 8 php git merge laravel composer-php
这是我们的情况:
我们有3个不同的Laravel项目,所有3个项目都依赖于我们的核心项目.这个Core项目是一个单独的Laravel包,托管在我们的私有仓库上,用作其他项目的依赖项.
之前,只要Core项目中的某些内容发生变化,我们就会在每个项目的服务器上运行一个作曲家更新myvendor/ourcorepackage来引入核心变化.然而,最近当我们尝试在512 MB Ram的数字海洋登台环境中运行更新时,作曲家似乎遇到了严重的内存问题.请参阅:https://github.com/composer/composer/issues/1898
我经常遇到的解决方案是人们说你应该总是在生产服务器上运行composer install.我可以在安全性方面与此相关,因为如果您更新到可能会破坏您的代码的某些第三方软件包的新版本,则可能会很危险.但在我们的例子中,我们只更新自己的核心包,因此我们知道我们正在做什么,但是这个内存问题迫使我们使用composer install方法,因为它对内存要求较低.
基本上这是我们当前的工作流程:
当我们的核心包中的某些内容发生变化时,我们需要在每个项目上运行一个作曲家更新myvendor/ourpackage LOCALLY这将生成一个composer.lock文件
我们在repo中提交composer.lock文件
在每个项目的服务器上,我们运行一个git pull并运行一个composer install.这只会更新我们的核心软件包并且运行速度更快,并且与编译器更新相比没有内存问题
但是,这个解决方案引发了两个问题
那我该怎么办呢?在拉动服务器之前删除composer.lock文件?我们应该如何处理composer.lock文件的合并冲突?
令人遗憾的是,作曲家更新会受到内存问题的影响,因为这种方法似乎更合乎逻辑.只需使用composer.lock文件更新所需的包,就不会有任何麻烦.
请告知如何在我们的案例中使用GIT和作曲家的正确工作流程以及如何解决上述冲突?
非常感谢您的投入
Xov*_*ver 15
另一种方法(不做composer update):
composer.json到一个单独的文本文件中。composer.json和composer.lock文件。composer installcomposer require vendor/package:versioncomposer remove vendor/package此方法将保持来自远程分支(可能master或develop多个分支)的锁,并且仅更新您的新包。
Sve*_*ven 13
如果开发人员不自己执行此步骤,您如何测试核心更新(或任何其他更新的依赖项)是否会破坏使用它的项目中的内容?
这就是为什么通常的工作流程期望在composer update具有足够RAM的开发机器上运行(即可能超过1GB设置为PHP的内存限制),并且更新应该由开发人员手动触发(并且如果通过持续集成自动触发)构建,内存要求也适用于此机器).
无法满足此内存要求.安装了512 MB RAM的Web服务器可能只能作为临时服务器,几乎没有任何并发用户,但不应该用它来更新Composer依赖项.
我个人修复了composer.lock一个非常简单的系统中的合并冲突:删除锁定文件并运行composer update.这将更新所有依赖项以满足版本要求的最新版本,并创建composer.lock在合并期间提交的新工作文件.
我并不害怕可能更新所有内容,因为它可以按预期工作,或者我的测试会很快发现错误.
我确实选择了我使用的第三方包:
这与我们当地的Satis实例提供的大约270个软件包一起使用(在尝试减少内存占用时可能也是一个需要考虑的因素 - 只有Composer知道的软件包才能最终存储在内存中:比较packagist.org上可能提供的一万个软件包270个本地包裹).270个包装由270个开发人员在本地开发,并随机发布新版本.过去两年中的更新失败非常罕见,应该像其他错误一样处理:如果检测到标记版本不兼容,我们会发布恢复更改的错误修正版本,并使用新的主要版本标记原始更改,如果需要进行不兼容的更改.
所以你要求的工作流程可能是这样的:
composer update在他的本地计算机上运行.composer.lock文件在内的更改提交给Gitcomposer install并将使用开发人员在其计算机上使用的版本.将已提交的版本合并到另一台开发人员计算机上可能会显示合并冲突composer.lock.
composer.lock文件应删除.composer update在他的本地计算机上运行.