在composer依赖项中使用包fork

时间:2014-12-31 00:19:18

标签: php git github composer-php

我正在开发一个laravel包(我们称之为包A),它需要另一个包(包B https://github.com/dropbox/dropbox-sdk-php)。

我已经制作了一个包B(https://github.com/EmilioBravo/dropbox-sdk-php)的分支,在一个新分支中做了一些修改" fix64"并将我的GitHub repo添加为包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中调用composer update,它会正确地下载我的fork,但是,如果我在另一个项目(Project C)中使用包A作为依赖项并从中调用composer update,那么composer说它可以'找到dev-fix64。

  

问题1

- emilio-bravo/platform dev-dropboxfix requires dropbox/dropbox-sdk dev-fix64 -> no matching package found.
     
      
  • emilio-bravo / platform dev-dropboxfix需要dropbox / dropbox-sdk dev-fix64 - >找不到匹配的包。

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

  •   

只有当我在项目C composer.json中添加我的仓库作为存储库时,它才会找到我的fork分支。

另一方面,我发现将我的叉子克隆到满意的存储库中。

但它感觉不对。如何让作曲家从GitHub找到我的分支?

1 个答案:

答案 0 :(得分:2)

将自定义存储库添加到主项目是使Composer了解新源的唯一方法。

它是故意这样做的,因为否则repos可以添加repos可以添加repos ...而不保证有一个有限的repos列表。

此外,添加回购并未声明有关在哪个软件中找到该软件,Composer将扫描每个标记和分支。从理论上讲,存储库可以拥有另一个分支,用于完全不同的,众所周知的包,提供更新版本的包,并添加一些恶意行为。

一般来说,编写器似乎非常适合防止远程代码执行,但不知情的人做出错误决定除外。

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