197

这是我的composer.json,我想在 Github 上使用 Nodge 的 lessphp 项目的 fork

 "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"
},

但是当我运行时出现此错误composer update

nodge/lessphp dev-master -> 找不到匹配的包。

我不知道如何正确地要求这个叉子。

4

8 回答 8

264

最常见(也是最简单)的方法是使用 VCS 存储库。

您所要做的就是将您的 fork 添加为存储库并更新版本约束以指向您的自定义分支。您的自定义分支名称必须dev-.

假设您分叉了monolog/monolog并创建了一个名为bugfix的分支,您将像这样更新您的 composer.json:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/igorw/monolog"
        }
    ],
    "require": {
        "monolog/monolog": "dev-bugfix"
    }
}

请注意,除了指定错误修复分支外,您不会更改 require 语句。您仍然引用上游包 ( monolog/monolog),而不是您的个人 fork ( igorw/monolog),并且分支名称带有前缀dev-您可以在文档中阅读详细信息

于 2012-11-21T19:29:34.520 回答
50

使用 VCS 工作:

"name": "test/test",
"repositories": [{
    "type": "vcs",
    "url": "http://github.com/Nodge/lessphp"
}],
"require": {
    "leafo/lessphp": "dev-master"
},

但是如果我需要一个具有 this 的模块composer.json,它就不起作用。它安装原始项目,而不是 fork。

例子

"name": "example/example",
"require": {
    "test/test": "dev-master"
},

我应该再次提到存储库。这正常吗?

于 2012-11-22T08:49:56.193 回答
42

如果您无法让@Neilime 回答为您工作,请确保您的 fork 使用不同的分支。

例如,将您的更改推送到分支上名为 的分支my-bugfix,不要dev-在分支名称中添加前缀,但在您的 composer.json 中您必须添加它。您的作曲家文件将如下所示:

"repositories":
[
    {
        "type": "vcs",
        "url": "http://github.com/yourname/packageName"
    }
],
"require": {
    "owner/packageName": "dev-my-bugfix"
},
于 2015-02-12T14:39:07.963 回答
16

我尝试了很多选择,但在我收到这篇文章后,我看到了光线,而且效果很好。

这是你必须做的:

1- 分叉存储库

2-创建一个分支并进行所需的修改。

3-将存储库标签添加到您的 composer.json

"repositories": [
     
        {
            "type": "vcs",
            "url": "https://github.com/user/yourforkname"
        }
    ]

4-在项目内的命令行中,需要你的 fork,如下所示:

composer require vendor/packagename:dev-branchname

瞧!

你有你的叉子版本工作

于 2018-05-13T14:38:53.570 回答
7

根据 Composer 文档 http://getcomposer.org/doc/05-repositories.md#vcsrequire ,在(在您的情况下为“nodge/lessphp” )中指定原始存储库(而不是 fork)就足够了。Composer 然后将安装您的 fork(查看供应商中的代码)

于 2013-01-15T13:26:59.493 回答
5

所以,现在是 2019 年,这里的大部分答案已经是正确的。

但是,如果您发现自己需要 fork 的特定分支(您创建的),请先让 composer 列出可用的版本/标签。这为我节省了很多时间。

一个完整的spatie/laravel-backup包示例。

首先,将repositorieskey 添加到 composer.json。使用你的 fork 的 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
于 2019-08-08T07:50:05.983 回答
2

我通常在包定义中添加一个“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": "*"
    }
}
于 2016-02-20T12:10:18.923 回答
0

当我有前任时,接受的答案和澄清的答案对我来说都很好。一个应用程序,它需要我已经分叉和修改的依赖项。在这种情况下,我仍然会使用公认的答案。

然而,当我有一个时,我想在 Packagist 上分发自己,该包还包含一个分叉和修改的依赖项,这种方法不再有效。

如果有人尝试使用此配置进行安装,他们仍然会收到相同的 -> no matching package found.错误消息。

这个答案链接的 Composer 文档表明 repo 设置必须是顶级的composer.json。这意味着,安装此软件包的人也必须将该配置添加到他们的composer.json文件中——这给安装过程增加了很多不必要的混乱。

相反,我将我的 fork 发布到了 Packagist。我的理解是,虽然叉子不受欢迎,但这将被认为是一个维护的叉子,因为我将它用于这个新包。

希望这对任何对他们想要分发的包或库有此问题的人有所帮助。

于 2020-11-14T01:46:44.543 回答