Php 如何使composer动态加载分支?

Php 如何使composer动态加载分支?,php,composer-php,Php,Composer Php,我正在使用composer组织我的供应商库。其中一个库是通用系统类的私有存储库 问题是,我希望在dev环境中的dev分支上运行代码,并自动使用composer库的dev分支。当代码处于暂存状态时,我希望使用暂存分支,并让composer开关使用composer库的暂存分支。生产也一样 composer是否可以在不必手动切换到该分支或编辑composer.json文件的情况下提取正确的分支 编辑:有用答案是接受答案的评论 分支别名对于主开发行的别名非常有用。但是为了使用它们,您需要控制源存储库,并

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

问题是,我希望在dev环境中的dev分支上运行代码,并自动使用composer库的dev分支。当代码处于暂存状态时,我希望使用暂存分支,并让composer开关使用composer库的暂存分支。生产也一样

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

编辑:有用答案是接受答案的评论

分支别名对于主开发行的别名非常有用。但是为了使用它们,您需要控制源存储库,并且需要将更改提交到版本控制

当您只想尝试某个库的错误修复(该库是本地项目的依赖项)时,这并不是很有趣

因此,您可以在
require
require dev
字段中为包添加别名。假设您在
monolog/monolog
包中发现了一个bug。您在GitHub上克隆了Monolog,并在名为
bugfix
的分支中修复了该问题。现在,您希望在本地项目中安装该版本的monolog

您使用的是
symfony/monolog bundle
,它需要
monolog/monolog
version
1.*
。因此,您需要您的
dev错误修复
来匹配该约束

只需将其添加到项目的根
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"
    }
}
分支别名对于主开发行的别名非常有用。但是为了使用它们,您需要控制源存储库,并且需要将更改提交到版本控制

当您只想尝试某个库的错误修复(该库是本地项目的依赖项)时,这并不是很有趣

因此,您可以在
require
require dev
字段中为包添加别名。假设您在
monolog/monolog
包中发现了一个bug。您在GitHub上克隆了Monolog,并在名为
bugfix
的分支中修复了该问题。现在,您希望在本地项目中安装该版本的monolog

您使用的是
symfony/monolog bundle
,它需要
monolog/monolog
version
1.*
。因此,您需要您的
dev错误修复
来匹配该约束

只需将其添加到项目的根
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的设计不是为了动态包含代码。事实上,它的设计目的是故意不自行更改代码,而只是与开发人员交互(即显式更新)

因此,如果您设法在您的开发分支中需要一个版本,然后将其合并到登台,那么如果您将
composer.lock
原封不动地移动,它将获取与您的开发分支情况完全相同的版本-现在处于登台状态。这实际上是一件好事,因为您确实希望测试真正的软件,而用于开发的软件是应该进入阶段然后进入生产的软件-没有其他动态绑定的软件

我在使用旧的遗留模块时遇到了完全相同的问题。它确实包含配置数据,这些数据应该以不同于开发人员、登台人员和生产人员的方式发布,但我不能为此使用Composer


如果您能更详细地描述一下您的用例,可能会有一个解决方案。但我几乎不相信它会包含Composer。

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

因此,如果您设法在您的开发分支中需要一个版本,然后将其合并到登台,那么如果您将
composer.lock
原封不动地移动,它将获取与您的开发分支情况完全相同的版本-现在处于登台状态。这实际上是一件好事,因为您确实希望测试真正的软件,而用于开发的软件是应该进入阶段然后进入生产的软件-没有其他动态绑定的软件

我在使用旧的遗留模块时遇到了完全相同的问题。它确实包含配置数据,这些数据应该以不同于开发人员、登台人员和生产人员的方式发布,但我不能为此使用Composer


如果您能更详细地描述一下您的用例,可能会有一个解决方案。但我几乎不相信它会包含Composer。

Composer.lock文件将准确记录使用的提交id,并还原此版本,而不还原其他内容。除非您手动强制更新,或者由于删除/不提交锁文件而在每次安装时间接强制更新,否则这不会动态捕获最新的提交。
composer.lock
文件将准确记录使用的提交id,并还原此版本,而不会还原其他内容。除非手动强制更新,或者由于删除/不提交锁文件而在每次安装时间接强制更新,否则这将不会动态捕获最新的提交。此问题与在每个环境上具有不同的配置无关。我的代码已经解决了这个问题。这是关于在每个环境中有不同版本的代码。我们通常有几个环境,在这些环境中,我们的移动应用程序可以构建新功能。当这些工作完成后,我们将合并到staging分支中并最终生存。由于composer库经常有相关的更改,因此我们需要保持分支不变。这并不理想,我也不一定同意这个过程,但事实就是如此。有一个神奇的值允许在两个库之间保持同步:
self.version
。我见过它被用来同步Zend Framework 2的所有单个模块。新版本发布后,每个库都会获得ta