如何要求一个分叉与作曲家?

这是我的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"
},

但是当我运行composer update时,我得到了这个错误:

Nodge /lessphp dev-master >没有找到匹配的包。

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

84676 次浏览

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

你所要做的就是将你的fork添加为一个存储库并更新 版本约束指向您的自定义分支。您的自定义分支

. name 必须前缀为dev-

假设你分叉了独白/独白并创建了一个名为错误修复的分支,你将更新你的作曲器。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"
},

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

例子

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

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

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

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

例如,将您的更改推送到fork上名为my-bugfix的分支,不要在分支名称中添加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(你自己创建的)的特定的分支,请先让编写器列出可用的版本/标签。 这为我节省了很多时间。

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

首先,将repositories键添加到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

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

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

如果有人试图安装这个配置,他们仍然会得到相同的 -> no matching package found.错误消息。

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

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

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