【发布时间】:2014-11-01 22:38:48
【问题描述】:
这是我们的情况:
我们有 3 个不同的 Laravel 项目,所有 3 个项目都依赖于我们的核心项目。 这个 Core 项目是一个单独的 Laravel 包,托管在我们的私有仓库中,并用作其他项目的依赖项。
以前,每当核心项目发生变化时,我们只需在我们的服务器上运行 composer update ourvendor/ourcorepackage 来为每个项目引入核心变化。然而,最近,当我们尝试在具有 512 MB 内存的 Digital Ocean 暂存环境上运行更新时,composer 似乎遇到了严重的内存问题。见:https://github.com/composer/composer/issues/1898
我经常遇到的解决方案是人们说您应该始终在生产服务器上运行 composer install。我可以在安全性方面与此相关,因为如果您更新到某些可能会破坏您的代码的第 3 方软件包的新版本,这可能会很危险。但在我们的例子中,我们只更新了自己的核心包,所以我们知道我们在做什么,但是这个内存问题迫使我们使用 composer install 方法,因为它对内存的需求较少。
所以基本上这是我们当前的工作流程:
当我们的核心包发生变化时,我们需要运行一个作曲家 在本地更新每个项目上的ourvendor/ourpackage 这会生成一个 composer.lock 文件
我们在 repo 中提交 composer.lock 文件
在每个项目的服务器上,我们运行 git pull 并运行 composer 安装。这只会更新我们的核心包并运行得更快 并且与作曲家更新相比没有内存问题
但是这个解决方案引发了 2 个问题:
- 由于我们在同一个项目上与多个开发人员合作,因此在本地拉取更改时,我们有时最终会遇到 composer.lock 文件的合并冲突。
- 在服务器上运行 git pull 会出现错误:您对以下文件的本地更改将被合并覆盖:composer.lock 请在合并之前提交您的更改或存储它们。
那么我应该在这里做什么?在服务器上拉之前删除 composer.lock 文件? 我们应该如何处理 composer.lock 文件的合并冲突?
很遗憾,composer update 遇到内存问题,因为这种方法看起来更合乎逻辑。只需更新您想要的软件包,无需使用 composer.lock 文件..
请建议在我们的案例中,正确的 GIT 和 composer 工作流程应该如何以及如何解决上述冲突?
非常感谢您的意见
【问题讨论】:
标签: php git laravel merge composer-php