如何要求与作曲家的叉子

时间:2012-11-21 17:14:41

标签: github composer-php git-fork

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

但是当我进行更新时我有这个错误:

  

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

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

有什么建议吗?

8 个答案:

答案 0 :(得分:171)

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

  

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

假设您修补了monolog以修复bugfix分支中的错误的示例:

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

请注意,除了指定bugfix分支外,不要更改require语句。您仍然引用上游包(monolog/monolog),而不是您的个人分支(igorw/monolog)。您可以阅读详细信息in the docs

答案 1 :(得分:39)

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

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

答案 2 :(得分:25)

如果您无法获得@Neilime的答案,请确保您的分叉使用不同的分支。

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

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

答案 3 :(得分:6)

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

答案 4 :(得分:3)

我尝试了很多选项,但是在收到这篇文章之后,我看到了灯光,它完美无缺。

这就是你要做的事情:

1- Fork de repository

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

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

"repositories": [

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

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

composer require vendor/packagename:dev-branchname

和Voilá!!

你的fork版本正常工作

答案 5 :(得分:2)

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

但是,如果您发现自己,则在需要您的叉子(您创建的)的特定分支的情况下,请让作曲家首先列出可用的版本/标签。 这节省了我很多时间。

带有spatie/laravel-backup软件包的完整示例。

首先,将repositories键添加到composer.json。用你的叉子的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 :(得分:1)

我通常添加" 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": "*"
    }
}

答案 7 :(得分:0)

我以前的时候,被接受的答案和明确的答案对我来说都很好。一个应用,它需要我创建和修改的依赖项。在这种情况下,我仍将使用接受的答案。

但是,当我有一个软件包时,我想将自己分发到Packagist上,该软件包还包含一个分叉的和经过修改的依赖项,这种方法不再起作用。

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

This answerlinked Composer docs建议回购设置必须位于顶级composer.json上。这意味着,安装此软件包的人也必须将该配置添加到他们的composer.json文件中,这给安装过程带来了很多不必要的混乱。

相反,我将叉子发布给了Packagist。我的理解是,尽管人们不赞成使用fork,但由于我将其用于此新程序包,因此这将被视为维护的fork。

希望这对希望分发软件包或库的人有帮助。