这是我的composer.json,我想在Github上使用Nodge的lessphp项目分支
"repositories": [{
"type": "package",
"package": {
"version": "dev-master",
"name": "nodge/lessphp",
"source": {
"url": "https://github.com/Nodge/lessphp.git",
"type": "git",
"reference": "master"
},
"autoload": {
"classmap": ["lessc.inc.php"]
}
}
}],
"require": {
"php": ">=5.3.3",
"nodge/lessphp": "dev-master"
},
但是当我进行更新时我有这个错误:
nodge / lessphp dev-master - >找不到匹配的包。
我不知道如何正确地要求它这个叉子......
有什么建议吗?
答案 0 :(得分:171)
最常见(也更简单)的方法是使用VCS存储库。
您所要做的就是将您的fork添加为存储库并更新 版本约束指向您的自定义分支。你的自定义分支 名称必须以
dev-
作为前缀。
假设您修补了monolog以修复bugfix分支中的错误的示例:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/igorw/monolog"
}
],
"require": {
"monolog/monolog": "dev-bugfix"
}
}
请注意,除了指定bugfix分支外,不要更改require语句。您仍然引用上游包(monolog/monolog
),而不是您的个人分支(igorw/monolog
)。您可以阅读详细信息in the docs
答案 1 :(得分:39)
使用VCS工作:
"name": "test/test",
"repositories": [{
"type": "vcs",
"url": "http://github.com/Nodge/lessphp"
}],
"require": {
"leafo/lessphp": "dev-master"
},
但是如果我需要一个具有此composer.json
的模块,它就不起作用。它安装原始项目,而不是fork。
"name": "example/example",
"require": {
"test/test": "dev-master"
},
我应该再次提到存储库。这是正常的吗?
答案 2 :(得分:25)
如果您无法获得@Neilime的答案,请确保您的分叉使用不同的分支。
例如,将更改推送到名为my-bugfix
的分支上的分支,不要在分支名称中添加dev-
前缀,但在composer.json中必须添加它。您的作曲家文件将如下所示:
"repositories":
[
{
"type": "vcs",
"url": "http://github.com/yourname/packageName"
}
],
"require": {
"owner/packageName": "dev-my-bugfix"
},
答案 3 :(得分:6)
根据Composer文档
http://getcomposer.org/doc/05-repositories.md#vcs,这足够了
在require
中指定原始存储库(而不是fork)(在您的情况下为“nodge / lessphp”)。然后,Composer将安装您的fork(查看供应商中的代码)
答案 4 :(得分:3)
我尝试了很多选项,但是在收到这篇文章之后,我看到了灯光,它完美无缺。
这就是你要做的事情:
1- Fork de repository
2-创建分支并进行必要的修改。
3-将存储库标签添加到composer.json
"repositories": [
{
"type": "vcs",
"url": "https://github.com/user/yourforkname"
}
]
4-在项目内的命令行中,需要像这样的fork:
composer require vendor/packagename:dev-branchname
和Voilá!!
你的fork版本正常工作
答案 5 :(得分:2)
所以,这是2019年,这里的大多数答案已经正确了。
但是,如果您发现自己,则在需要您的叉子(您创建的)的特定分支的情况下,请让作曲家首先列出可用的版本/标签。 这节省了我很多时间。
带有spatie/laravel-backup
软件包的完整示例。
首先,将repositories
键添加到composer.json。用你的叉子的URL
"repositories": [{
"type": "vcs",
"url": "https://github.com/holymp2006/laravel-backup"
}]
获取可用的版本/标签
composer show "spatie/laravel-backup" --all
在终端输出中从versions
中选择所需的版本,然后要求该版本
composer require spatie/laravel-backup:v5.x-dev
答案 6 :(得分:1)
我通常添加" dist"节点到包定义。 我从来没有遇到过以这种方式使用它的问题。
我无法记住从哪里得到这个技巧,但是,任何进一步的解释。
{
"repositories": [
{
"type": "package",
"package": {
"version": "dev-master",
"name": "nodge/lessphp",
"source": {
"url": "https://github.com/Nodge/lessphp.git",
"type": "git",
"reference": "master"
},
"autoload": {
"classmap": ["lessc.inc.php"]
},
"dist": {
"url": "https://github.com/Nodge/lessphp/archive/master.zip",
"type": "zip"
}
}
}
],
"require": {
"nodge/lessphp": "*"
}
}
答案 7 :(得分:0)
我以前的时候,被接受的答案和明确的答案对我来说都很好。一个应用,它需要我创建和修改的依赖项。在这种情况下,我仍将使用接受的答案。
但是,当我有一个软件包时,我想将自己分发到Packagist上,该软件包还包含一个分叉的和经过修改的依赖项,这种方法不再起作用。
如果有人尝试使用此配置进行安装,他们仍然会收到相同的 -> no matching package found.
错误消息。
This answer和linked Composer docs建议回购设置必须位于顶级composer.json
上。这意味着,安装此软件包的人也必须将该配置添加到他们的composer.json
文件中,这给安装过程带来了很多不必要的混乱。
相反,我将叉子发布给了Packagist。我的理解是,尽管人们不赞成使用fork,但由于我将其用于此新程序包,因此这将被视为维护的fork。
希望这对希望分发软件包或库的人有帮助。