如何要求与作曲家的叉子

Nei*_*ime 150 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"
},
Run Code Online (Sandbox Code Playgroud)

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

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

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

有什么建议 ?

Sel*_*aek 190

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

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

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

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/igorw/monolog"
        }
    ],
    "require": {
        "monolog/monolog": "dev-bugfix"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • "阅读文档"是一个糟糕的答案,更好的答案是给出一个具体的例子 (12认同)
  • @CMCDragonkai尝试运行`composer show jwade/purl -v`它应该告诉你为什么它忽略了dev-master版本,如果它的话. (11认同)
  • 这似乎不适用于https://github.com/Polycademy/purl这是https://github.com/jwage/purl的分支我一直在尝试:"存储库":[{"type ":"vcs","url":"git@github.com:Polycademy/purl.git"}]和"require":{"jwade/purl":"dev-master",},但我一直在:问题1 - 在任何版本中找不到请求的包jwade/purl,包名中可能有拼写错误. (6认同)
  • 很高兴警告不要引用个人分叉.这节省了我的一天,+ 1 (6认同)
  • @seldaek你救了我!谢谢!(我的分叉叫dev-dev- ..)不知道命名是自动的. (4认同)
  • 您的分支名称不需要添加`dev-`,当您在composer.json文件中需要时,最终将得到重复的dev-dev-。这就是为什么当您需要在composer.json中将我们的master分支添加为`dev-master`的原因 (2认同)

Nei*_*ime 41

使用VCS工作:

"name": "test/test",
"repositories": [{
    "type": "vcs",
    "url": "http://github.com/Nodge/lessphp"
}],
"require": {
    "leafo/lessphp": "dev-master"
},
Run Code Online (Sandbox Code Playgroud)

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

"name": "example/example",
"require": {
    "test/test": "dev-master"
},
Run Code Online (Sandbox Code Playgroud)

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

  • @Julien,我刚刚使用过这种方法,它就像一个魅力... [docs](https://getcomposer.org/doc/05-repositories.md#vcs)很清楚,你必须记住在需要相关包时,将*dev-*前缀放在自定义分支名称中. (4认同)
  • 我用了十几个叉子,**这从来没用过**.这是一个有效的解决方案:http://stackoverflow.com/a/27970559/183904 (3认同)
  • 为我工作......但我想提一下,我需要使用https://作为URL. (2认同)

Boe*_*edy 27

如果你无法得到@Neilime的答案,请确保你的fork使用不同的分支.

例如,将您的更改推送到您的分支上的分支my-bugfix,不要dev-在分支名称中添加前缀,但是在您的composer.json中,您必须添加它.你的作曲家文件看起来像:

"repositories":
[
    {
        "type": "vcs",
        "url": "http://github.com/yourname/packageName"
    }
],
"require": {
    "owner/packageName": "dev-my-bugfix"
},
Run Code Online (Sandbox Code Playgroud)

  • 但是如果是别人的叉子呢?请参阅示例 [此处](https://github.com/maknz/slack-laravel/pull/11#issuecomment-360841508) (2认同)

Lui*_* B. 15

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

这是你必须做的:

1-分叉存储库

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

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

"repositories": [
     
        {
            "type": "vcs",
            "url": "https://github.com/user/yourforkname"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

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

composer require vendor/packagename:dev-branchname
Run Code Online (Sandbox Code Playgroud)

瞧!

你有你的 fork 版本工作


Elv*_*tti 7

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


小智 5

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

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

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

首先,将repositories密钥添加到 composer.json。用你的叉子的网址

"repositories": [{
   "type": "vcs",
   "url": "https://github.com/holymp2006/laravel-backup"
 }]
Run Code Online (Sandbox Code Playgroud)

获取可用版本/标签

composer show "spatie/laravel-backup" --all
Run Code Online (Sandbox Code Playgroud)

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

composer require spatie/laravel-backup:v5.x-dev
Run Code Online (Sandbox Code Playgroud)