【问题标题】:How can I make composer load a branch dynamically?如何让作曲家动态加载分支?
【发布时间】:2013-12-13 03:58:26
【问题描述】:

我正在使用 composer 来组织我的供应商库。其中一个库是通用系统类的私有存储库。

问题是我想让我的代码在 dev 环境中运行在 dev 分支之外,并自动使用我的 composer 库的 dev 分支。当代码在暂存时,我想使用暂存分支并让作曲家开关使用作曲家库的暂存分支。生产也一样。

composer 是否可以在无需手动切换到该分支或编辑 composer.json 文件的情况下提取正确的分支?

编辑:有用的答案是接受答案的 cmets。

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    Composer 并非旨在动态包含代码。事实上,它的设计目的是故意不更改自己的代码,而只是与开发人员交互(即显式更新)。

    因此,如果您设法在您的 dev 分支中要求一个版本,然后将其合并到 staging,如果您将 composer.lock 保持不变,它将准确获取您的 dev 分支情况的版本 - 现在在 staging 中。这实际上是一件好事,因为您确实想测试真正的软件,而用于开发的软件是应该进入登台然后投入生产的软件 - 没有其他动态绑定的软件。

    我在使用旧的遗留模块时遇到了完全相同的问题。它确实包含配置数据,应该与开发、登台和生产不同地推出,但我不能为此使用 Composer。

    如果您能多描述一下您的用例,或许会有适合您的解决方案。但我几乎不相信它会包含 Composer。

    【讨论】:

    • 这个问题不是关于每个环境有不同的配置。我的代码已经解决了这个问题。这是关于在每个环境中拥有不同版本的代码。我们通常有几个环境,我们的移动应用程序可以在其中构建新功能。完成这些后,我们合并到 staging 分支并最终生存。由于作曲家库经常有相关的变化,我们需要保持分支不变。这并不理想,我也不一定同意这个过程,但它就是这样。
    • 有一个神奇的值可以让两个库之间保持同步:self.version。我已经看到它被用来同步 Zend Framework 2 的所有单个模块。一旦发布了新版本,每个库都会被标记为该新版本 - 更改无关紧要。但即便如此,您也需要使用 Composer 工作流程:没有任何东西会自动更新,您必须手动完成。如果您即将发布主模块的 4.15 版本,则必须手动将依赖项更新到 4.15.x。使用self.version 允许不更改composer.json 中的版本。
    • 太棒了!这就是我一直在寻找的。谢谢。
    【解决方案2】:

    Require inline alias

    分支别名非常适合给主要开发线加上别名。但是为了使用它们,您需要控制源存储库,并且您需要提交对版本控制的更改。

    当您只想尝试修复某个依赖于本地项目的库时,这并不是很有趣。

    因此,您可以在 requirerequire-dev 字段中为包设置别名。假设您在monolog/monolog 包中发现了一个错误。您在 GitHub 上克隆了 Monolog,并在名为 bugfix 的分支中修复了该问题。现在你想在你的本地项目中安装那个版本的独白。

    您正在使用symfony/monolog-bundle,这需要monolog/monolog 版本1.*。所以你需要你的dev-bugfix 来匹配那个约束。

    只需将其添加到项目的根目录composer.json

    {
        "repositories": [
            {
                "type": "vcs",
                "url": "https://github.com/you/monolog"
            }
        ],
        "require": {
            "symfony/monolog-bundle": "2.0",
            "monolog/monolog": "dev-bugfix as 1.0.x-dev"
        }
    }
    

    【讨论】:

    • composer.lock 文件将准确记录使用了哪个提交 ID,并恢复此版本,仅此而已。除非您手动强制更新,或者因为您删除/不提交锁定文件而在每次安装时间接强制更新,否则这不会动态获取最近的提交。
    猜你喜欢
    • 2013-12-09
    • 2018-10-27
    • 2018-08-26
    • 1970-01-01
    • 2013-03-05
    • 2015-09-24
    • 2013-05-26
    • 2018-06-15
    相关资源
    最近更新 更多