需要具有其他依赖项应该使用的composer的fork

时间:2013-07-31 12:14:58

标签: php laravel laravel-4 composer-php dependency-management

我有一个Laravel项目,我想使用自己的fork(已经合并了几个pull-requests)。以下composer.json按预期工作(它从我的repo中获取master分支):

{
    "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 from cache
  •   
  • 从缓存中加载
  •   
  • 提取档案

  •   
  • 原因:zizaco /委托dev-master需要照亮/支持4.0.x - >

    可以满足      
        
    • laravel / framework [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-dev],
    •   
    • gexge / framework [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],
    •   
    • shrimpwagon / laravel-framework [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]。
    •   
  •   

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

有没有办法让依赖关系拿起我的分叉而不是试图找到另一个?我的fork有相同的包名(composer.json没有被更改) - 所以我认为这样可行。

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

1 个答案:

答案 0 :(得分: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上,我会联系业主。