在composer依赖项中使用包fork

Emi*_*avo 5 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添加为composer.json中的一个存储库.包装A,如作曲家文档中所示:

"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"
},
Run Code Online (Sandbox Code Playgroud)

如果我从包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.
Run Code Online (Sandbox Code Playgroud)
  • emilio-bravo/platform dev-dropboxfix需要dropbox/dropbox-sdk dev-fix64 - >找不到匹配的包.

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

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

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

但感觉不对.我怎样才能让作曲家从GitHub找到我的前叉?

Sve*_*ven 3

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

它是故意这样做的,因为否则回购协议可以添加回购协议可以添加回购协议......而不保证拥有有限的回购协议列表。

此外,添加存储库不会对在那里找到哪个软件做出任何声明,Composer 将扫描每个标签和分支。理论上,存储库可以为完全不同的众所周知的包建立另一个分支,提供其更新版本,并添加一些恶意行为。

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

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