如何要求作曲家的叉子?

Posted

技术标签:

【中文标题】如何要求作曲家的叉子?【英文标题】:How to require a fork with composer? 【发布时间】:2012-11-10 00:20:55 【问题描述】:

这是我的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 -> 找不到匹配的包。

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

【问题讨论】:

【参考方案1】:

最常见(也是最简单)的方法是使用 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- 为前缀。你可以阅读详情in the docs

【讨论】:

这似乎不适用于github.com/Polycademy/purl,它是github.com/jwage/purl 的一个分支我一直在尝试:"repositories": [ "type": "vcs", "url ": "git@github.com:Polycademy/purl.git" ] 和 "require": "jwade/purl": "dev-master", ,但我不断收到:问题 1 - 请求的包 jwade /purl 在任何版本中都找不到,可能包名有错别字。 @CMCDragonkai 尝试运行composer show jwade/purl -v 它应该会告诉你为什么它忽略了 dev-master 版本。 “阅读文档”是一个不好的答案,更好的答案是给出一个具体的例子 很高兴警告不要引用个人分叉。这节省了我的时间,+1 您的分支名称不需要添加 dev-,当您在 composer.json 文件中需要时,您最终会重复 dev-dev-。这就是为什么当您在 composer.json 中需要我们的主分支时,您已添加为 dev-master【参考方案2】:

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

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

【讨论】:

同样的问题 使用“rm -rf”手动删除模块,然后使用“composer update”。这对我有用。 我已经使用了十几个叉子,但这从未奏效。这是一个可行的解决方案:***.com/a/27970559/183904 @Julien,我刚刚用过这个方法,效果很好……docs很清楚,你只记得把dev- 需要相关包时,在自定义分支名称中添加前缀。 为我工作...但我想提一下,我需要使用 https:// 作为 URL。【参考方案3】:

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

这是你必须做的:

1- 分叉存储库

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

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

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

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

composer require vendor/packagename:dev-branchname

然后瞧!!

你的 fork 版本正在运行

【讨论】:

【参考方案4】:

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

但是,当我有一个时,我想将自己分发到 Packagist 上,其中还包含一个分叉和修改的依赖项,这种方法不再有效。

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

This answer 和 linked Composer docs 建议 repo 设置必须位于*** composer.json。这意味着,安装此软件包的人也必须将该配置添加到他们的 composer.json 文件中——这给安装过程增加了很多不必要的混乱。

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

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

这对我来说是巧妙而清晰的解释!谢谢! 但如果是别人的 else's 叉子怎么办?见例子here 此外,您的分叉存储库的 composer.json 文件中的 name 字段应与原始所有者保持一致。【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于如何要求作曲家的叉子?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel包的作曲家需要

叉子后如何通过键盘在孩子中引入字符串

如何在作曲家(laravel 4)中删除保存的用户名和密码

如何在“非作曲家”TYPO3中安装“仅限作曲家模式”扩展名

匙羹先生与叉子小姐餐饮店LOGO设计过程

叉子的流程,我有多少个叉子?