6

我有一个 Laravel 项目,我想使用我自己的 fork(合并了几个拉取请求)。以下 composer.json 按预期工作(它从我的仓库中获取主分支):

{
    "repositories": [
        {
            "type": "vcs",
            "url": "http://github.com/rmasters/framework"
        }
    ],
    "require": {
        "php": "5.4.*",
        "laravel/framework": "dev-master"
    },
    ...
    "minimum-stability": "dev"
}

但是,当我添加一个依赖于 Laravel 提供的 Illuminate 组件的包时(例如,zizaco/entrust它需要与我的 fork 提供的相同版本),我最终会得到这样的结果:

  • 安装 gexge/laravel-framework (4.0.x-dev 87556b2)
  • 从缓存中读取 .../Composer/cache/files/gexge/framework/87556b .....c382.zip
  • 从缓存加载
  • 提取档案

  • 原因:zizaco/entrust dev-master 需要照明/支持 4.0.x -> 可满足

    • laravel/框架[v4.0.5, v4.0.4, v4.0.3, v4.0.2, v4.0.1, v4.0.0-BETA4, v4.0.0-BETA3, v4.0.0-BETA2, v4.0.0, 4.0.x-开发],
    • gexge/框架[4.0.x-dev、v4.0.0、v4.0.0-BETA2、v4.0.0-BETA3、v4.0.0-BETA4、v4.0.1、v4.0.2、v4.0.3、v4.0.4、v4。 0.5],
    • 虾车/laravel 框架[4.0.x-dev, v4.0.0, v4.0.0-BETA2, v4.0.0-BE TA3, v4.0.0-BETA4, v4.0.5],
    • 照亮/支持[4.0.x-dev、v4.0.0、v4.0.0-BETA2、v4.0.0-BETA3、v4.0.0-BETA4、v4.0.1、v4.0.2、v4.0.3、v4.0.4、v4。 0.5]。

实际上最终我的叉子和这个叉子都安装了,gexge 叉子在自动加载器中优先。

有没有办法让依赖项拿起我的叉子而不是试图找到另一个?我的 fork 具有相同的包名称(composer.json 尚未更改) - 所以我认为这会起作用。

或者,我可以阻止某些软件包被选中吗?(我还没有找到任何文档。)令人讨厌的是,这两个分支似乎都没有太多理由首先出现在 Packagist 上,但我想 Composer 应该能够解决这个问题。

4

1 回答 1

10

您的 fork 有一个 master 的分支别名设置为4.1.x-dev,因此它不符合4.0.*要求。

解决方案是通过像这样要求它来给包起别名

{
    "repositories": [
        {
            "type": "vcs",
            "url": "http://github.com/rmasters/framework"
        }
    ],
    "require": {
        "php": "5.4.*",
        "laravel/framework": "dev-master as 4.0.0"
    },
    ...
    "minimum-stability": "dev"
}

事实上,那些叉子不应该出现在 Packagist 上,我会联系业主。

于 2013-07-31T13:04:07.603 回答