我正在开发一个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找到我的分支?
答案 0 :(得分:2)
将自定义存储库添加到主项目是使Composer了解新源的唯一方法。
它是故意这样做的,因为否则repos可以添加repos可以添加repos ...而不保证有一个有限的repos列表。
此外,添加回购并未声明有关在哪个软件中找到该软件,Composer将扫描每个标记和分支。从理论上讲,存储库可以拥有另一个分支,用于完全不同的,众所周知的包,提供更新版本的包,并添加一些恶意行为。
一般来说,编写器似乎非常适合防止远程代码执行,但不知情的人做出错误决定除外。
因此,如果您发现packagist.org上发布的包中存在错误,那么每个人的最佳方式是提出拉取请求。第二种最好的方法是以新名称分叉项目并将其发布在packagist.org上。使用具有相同项目名称的forked repo修补问题并将Composer指向它是最糟糕的解决方案,通常只适用于您自己项目的依赖项。