Php 作曲家及;GIT中的composer.lock和合并冲突

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似乎遇到了严重的内存问题。见: 我经常遇到的解决方案是,

我们的情况如下:

我们有3个不同的Laravel项目,所有3个项目都依赖于我们的核心项目。 该核心项目是一个单独的Laravel包,托管在我们的私人回购协议上,并用作其他项目的依赖项

以前,每当核心项目发生变化时,我们只需在服务器上为每个项目运行composer update ourvendor/ourcorepackage,以引入核心变化。然而,直到最近,当我们尝试在带有512 MB Ram的数字海洋登台环境上运行更新时,composer似乎遇到了严重的内存问题。见:

我经常遇到的解决方案是,人们说您应该始终在生产服务器上运行composer install。我可以从安全性的角度考虑这一点,因为如果您更新到某个第三方软件包的新版本,可能会破坏您的代码,这可能会很危险。但是在我们的例子中,我们只更新我们自己的核心包,这样我们就知道我们在做什么,但是这个内存问题迫使我们使用composer安装方法,因为它对内存的要求比较低

基本上这就是我们目前的工作流程:

  • 当我们的核心包发生变化时,我们需要运行一个编写器 在本地更新每个项目的供应商/ourpackage,这将生成 composer.lock文件

  • 我们在repo中提交composer.lock文件

  • 在每个项目的服务器上,我们运行git pull和composer 安装。这只会更新我们的核心包,运行速度会快得多 与编写器更新相比,没有内存问题

  • 但是,该解决方案提出了两个问题:

  • 由于我们在同一个项目上与多个开发人员协作,因此在本地引入更改时,有时会导致composer.lock文件的合并冲突
  • 在服务器上运行git pull会出现错误:对以下文件的本地更改将被merge:composer.lock覆盖 请在合并之前提交或隐藏更改
  • 那我在这里该怎么办?在拉取服务器之前,是否删除composer.lock文件? 我们应该如何处理composer.lock文件的合并冲突

    令人遗憾的是,composer update遇到了内存问题,因为该方法似乎更符合逻辑。只需更新所需的软件包,就可以轻松使用composer.lock文件

    请建议我们如何使用GIT和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
    • 他们应该能够检测到这是否破坏了本地机器上的东西
    • 如果没有任何内容被破坏,他们会将更改(包括
      composer.lock
      文件)提交给Git
    • 登台服务器只运行
      composer安装
      ,并且将完全使用开发人员在其计算机上使用的版本
    • 如果在登台时没有任何问题,那么该版本就可以在生产中使用了
    在另一台开发人员计算机上合并已提交的版本可能会显示与
    composer.lock
    的合并冲突

    • 解决所有其他文件上的冲突
    • 应删除
      composer.lock
      文件
    • 从这里开始,工作流程如上图所示,即:
    • 开发人员应该能够在其loc上运行
      composer update