在composer依赖中使用一个分支包

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

我已经分叉了 B 包 (https://github.com/EmilioBravo/dropbox-sdk-php),在新建的“fix64”分支中进行了一些更改,并将我的 GitHub 存储库添加到 A 包的 composer.json 中,如 composer 文档所示:
"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,则它会正确下载我的分支,但是,如果我将包A用作另一个项目(项目C)的依赖项,并从中调用composer update,则composer会显示找不到dev-fix64。

Problem 1

- emilio-bravo/platform dev-dropboxfix requires dropbox/dropbox-sdk dev-fix64 -> no matching package found.
  • emilio-bravo/platform dev-dropboxfix requires dropbox/dropbox-sdk dev-fix64 -> no matching package found.

  • Installation request for emilio-bravo/platform dev-dropboxfix -> satisfiable by emilio-bravo/platform[dev-dropboxfix].

只有在将我的仓库添加到项目C的composer.json文件中,它才能找到我fork的分支。
另一种方法是将我的fork克隆到satis仓库中。
但这种方法感觉不太对。我该如何让composer从GitHub中找到我的fork呢?

1
你有没有找到这个问题的有效解决方案?我也遇到了完全相同的问题。 - Austen Cameron
1
可能是如何使用Composer要求分支的重复问题。 - Alister Bulman
1个回答

3
将自定义仓库添加到主项目是使Composer意识到新源的唯一方法。故意这样做,因为否则仓库可以添加仓库可以添加仓库…,而没有保证有限的仓库列表。
此外,添加仓库并不表示可以在那里找到哪个软件,Composer将扫描每个标签和分支。理论上,存储库可以有另一个分支,用于完全不同的、众所周知的包,提供其更新版本,并添加一些恶意行为。
总体而言,Composer在防止远程代码执行方面似乎非常适合,除了未经事先了解就做出错误决策的人。
因此,如果您发现packagist.org上发布的软件包中存在漏洞,请向所有人提出拉取请求。第二种最佳方法是在新名称下分叉该项目,并将其发布在packagist.org上。使用具有相同项目名称的分叉存储库来修补问题是最糟糕的解决方案,通常仅适用于您自己项目的依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接