这是我的作曲家。我想在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 ->没有找到匹配的包。

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


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

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

假设你fork了monolog/monolog,并创建了一个叫做bugfix的分支,你会更新你的作曲家。Json是这样的:

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

注意,除了指定错误修复分支,您不需要更改require语句。您仍然引用上游包(monolog/monolog),而不是您的个人分支(igorw/monolog),并且分支名称前缀为dev-。你可以在文档中阅读细节


使用VCS的工作:

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

但如果我需要一个有这个作曲器的模块。Json,它不起作用。它安装原始项目,而不是分支。

例子

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

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


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


如果你不能让@Neilime的答案为你工作,确保你的fork使用不同的分支。

例如,将你的更改推送到一个名为my-bugfix的分支,不要在分支名中添加dev-前缀,而是在你的composer中添加dev-前缀。Json,你必须添加它。你的作曲文件看起来像这样:

"repositories":
[
    {
        "type": "vcs",
        "url": "http://github.com/yourname/packageName"
    }
],
"require": {
    "owner/packageName": "dev-my-bugfix"
},

我通常在包定义中添加一个“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": "*"
    }
}

我尝试过很多选择,但在我得到这个职位后,我看到了光明,它只是完美的工作。

这是你必须要做的:

1- Fork存储库

2-创建一个分支并进行必要的修改。

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

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

4-在项目的命令行中,像这样要求你的fork:

composer require vendor/packagename:dev-branchname

瞧! !

您的fork版本正在工作


现在是2019年,大部分答案都是正确的。

但是,如果你发现自己需要使用fork(你自己创建的)的一个特定分支,让编码器先列出可用的版本/标签。 这节省了我很多时间。

space / laravelv -backup包的完整示例。

首先,向composer.json添加存储库键。使用你的fork的url

"repositories": [{
   "type": "vcs",
   "url": "https://github.com/holymp2006/laravel-backup"
 }]

获取可用的版本/标签

composer show "spatie/laravel-backup" --all

从终端输出中的版本中选择您想要的版本,然后要求该版本

composer require spatie/laravel-backup:v5.x-dev

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

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

如果有人试图安装这个配置,他们仍然会得到相同的>没有找到匹配的包。错误消息。

这个答案和链接的Composer文档表明,回购设置必须在顶级的Composer .json中。这意味着,安装这个包的人必须将该配置添加到他们的编写器中。Json文件,这给安装过程增加了许多不必要的混乱。

相反,我把我的fork发布给了Packagist。我的理解是,虽然分叉是不受欢迎的,但这将被认为是一个维护的分叉,因为我正在这个新包中使用它。

希望这对任何遇到他们想要发布的包或库的问题的人都有帮助。