2014-12-31 15 views
5

我正在开发laravel包(让我们称之为包A),它需要另一个包(包B https://github.com/dropbox/dropbox-sdk-php)。在作曲者的依赖中使用包叉

我做了包B的叉(https://github.com/EmilioBravo/dropbox-sdk-php),取得了一个新的分支一些变化“fix64”,并增加我的GitHub库作为包A的composer.json存储库作为作曲家文档指出:

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "https://github.com/EmilioBravo/dropbox-sdk-php" 
    } 
], 
"require": { 
    "php": ">=5.4.0", 
    "illuminate/support": "4.2.*", 
    "dropbox/dropbox-sdk": "dev-fix64" 
}, 

如果我把作曲家更新从包A内它正确下载我的叉子,但是,如果使用套餐A中的另一个项目(项目C)从它的依赖和呼叫作曲家更新IM,作曲家说,它可以找到dev-fix64。

问题1

- emilio-bravo/platform dev-dropboxfix requires dropbox/dropbox-sdk dev-fix64 -> no matching package found. 
  • 埃米利奥-喝彩/平台DEV-dropboxfix需要收存箱/保管箱-SDK DEV-fix64 - >没有发现匹配包。

  • emilio-bravo/platform dev-dropboxfix的安装请求 - > emilio-bravo/platform [dev-dropboxfix]可以满足。

只有添加我的回购作为项目Çcomposer.json库找到我的叉子的分支。

我发现的另一种方法是将我的叉克隆到满意的存储库中。

但它感觉不对。我怎样才能让作曲家从GitHub中找到我的叉子?

+1

你有没有找到有效的解决方案呢?我有完全相同的问题。 –

+1

可能的重复[如何与作曲家需要一个叉](http://stackoverflow.com/questions/13498519/how-to-require-a-fork-with-composer) –

回答

2

将自定义存储库添加到主项目是让Composer知道新来源的唯一方法。

它是故意这样做,因为否则回购可能会添加回购可以添加回购...没有保证有一个有限的回购清单。

此外,添加一个回购并没有说明哪个软件将在那里找到,Composer将扫描每个标签和分支。在理论上,一个存储库可以有另一个分支用于一个完全不同的,知名的包,提供它的一个更新的版本,并添加一些恶意行为。

作曲家一般来说似乎非常适合于防范远程代码执行,除非是不知情的人做出错误的决定。

因此,如果您在packagist.org上发布的软件包中发现错误,那么对于每个人而言,最好的方法就是提出拉取请求。第二种最好的方法是用新名称分发项目并将其发布到packagist.org上。使用具有相同项目名称的分叉回购来修补问题并将Composer指向它是最糟糕的解决方案,通常只适用于您自己的项目的依赖性。