Php 作曲家及;GIT中的composer.lock和合并冲突
我们的情况如下: 我们有3个不同的Laravel项目,所有3个项目都依赖于我们的核心项目。 该核心项目是一个单独的Laravel包,托管在我们的私人回购协议上,并用作其他项目的依赖项 以前,每当核心项目发生变化时,我们只需在服务器上为每个项目运行composer update ourvendor/ourcorepackage,以引入核心变化。然而,直到最近,当我们尝试在带有512 MB Ram的数字海洋登台环境上运行更新时,composer似乎遇到了严重的内存问题。见: 我经常遇到的解决方案是,人们说您应该始终在生产服务器上运行composer install。我可以从安全性的角度考虑这一点,因为如果您更新到某个第三方软件包的新版本,可能会破坏您的代码,这可能会很危险。但是在我们的例子中,我们只更新我们自己的核心包,这样我们就知道我们在做什么,但是这个内存问题迫使我们使用composer安装方法,因为它对内存的要求比较低 基本上这就是我们目前的工作流程:Php 作曲家及;GIT中的composer.lock和合并冲突,php,git,laravel,merge,composer-php,Php,Git,Laravel,Merge,Composer Php,我们的情况如下: 我们有3个不同的Laravel项目,所有3个项目都依赖于我们的核心项目。 该核心项目是一个单独的Laravel包,托管在我们的私人回购协议上,并用作其他项目的依赖项 以前,每当核心项目发生变化时,我们只需在服务器上为每个项目运行composer update ourvendor/ourcorepackage,以引入核心变化。然而,直到最近,当我们尝试在带有512 MB Ram的数字海洋登台环境上运行更新时,composer似乎遇到了严重的内存问题。见: 我经常遇到的解决方案是,
非常感谢您的输入如果开发人员自己不执行此步骤,您如何测试核心更新(或任何其他更新的依赖项)不会破坏项目中的内容 这就是为什么通常的工作流期望
composer更新
在具有足够RAM的开发机器上运行(即可能超过1GB的PHP内存限制),并且更新应由开发人员手动触发(如果由持续集成构建自动触发,则内存要求也适用于此机器)
无法解决此内存需求。仅安装512 MB RAM的web服务器可能能够在几乎没有并发用户的情况下作为临时服务器运行,但不应使用它来更新Composer依赖项
就我个人而言,我用一个非常简单的系统修复了composer.lock
中的合并冲突:删除锁文件并运行composer update
。这将把所有依赖项更新到满足版本要求的最新版本,并创建一个新的工作composer.lock
文件,该文件在合并期间提交。
我不怕可能会更新所有内容,因为要么它按预期工作,要么我的测试会很快发现错误
我确实仔细选择了我使用的第三方软件包:
- 他们必须标记自己的版本,最好使用语义版本控制
- 我不在发布版本中使用任何分支(很少有人在开发过程中使用它们是痛苦的)
- 如果他们做了向后不兼容的更改,他们应该发布一个新的主要版本
- 本地开发的软件包也遵循这些要求
这是由我们本地SATS实例提供的大约270个包(可能也是试图减少内存占用时考虑的因素)-只有作曲者已知的包可以存储在内存中:将PACGIST.ORG上可能存在的一万个包与270个本地包进行比较)270个软件包中的.60个由20名开发人员在本地开发,并随机发布新版本。过去2年中的更新失败非常罕见,应该像处理其他错误一样处理:如果检测到标记的版本不兼容,我们将发布修复错误的版本,恢复更改,并使用新的主要版本标记原始更改e、 如果不兼容的更改是必要的
因此,您要求的工作流可能如下所示:- 任何时候,任何开发人员都应该能够在本地计算机上运行
composer update
- 他们应该能够检测到这是否破坏了本地机器上的东西
- 如果没有任何内容被破坏,他们会将更改(包括
文件)提交给Gitcomposer.lock
- 登台服务器只运行
,并且将完全使用开发人员在其计算机上使用的版本composer安装
- 如果在登台时没有任何问题,那么该版本就可以在生产中使用了
composer.lock
的合并冲突
- 解决所有其他文件上的冲突
- 应删除
文件composer.lock
- 从这里开始,工作流程如上图所示,即:
- 开发人员应该能够在其loc上运行
composer update