如何要求作曲家使用叉子



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

"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开发主机->找不到匹配的包。

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

最常见(也是最简单)的方法是使用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),而不是您的个人分支(igorw/monolog),并且分支名称以dev-为前缀。您可以阅读文档中的详细信息

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

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

如果你不能得到@Neilime的答案,请确保你的叉子使用不同的分支。

例如,将更改推送到分支上名为my-bugfix的分支,不要在分支名称中添加dev-前缀,而是必须在composer.json中添加

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

我尝试了很多选择,但在我收到这篇文章后,我看到了曙光,它非常完美。

这就是你必须做的:

1-分叉存储库

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

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

"repositories": [

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

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

composer require vendor/packagename:dev-branchname

还有Voilá!!

你有你的叉子版本工作

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

所以,现在是2019年,这里的大多数答案已经是正确的了。

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

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

首先,将repositories密钥添加到composer.json中

"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

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

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新