使用 PHP 编辑器克隆 git 存储库

2022-08-30 07:01:55

我正在尝试使用 composer 从 github 自动克隆一个 git 存储库,该存储库不在 packagist 中,但它不起作用,我无法弄清楚我做错了什么。

我认为我必须将其包含在“存储库”中,如下所示:

"repositories": [
    {
        "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
        "type": "git"
    }
],

然后可能将其列在“要求”部分中。它应该类似于此示例,但它不起作用。它只是给出这个错误:

您的要求无法解析为一组可安装的包。

有没有人尝试过做这样的事情?


答案 1

该软件包实际上可以通过packagist获得。在这种情况下,您不需要自定义存储库定义。只需确保添加一个(始终需要)具有匹配版本约束的。require

通常,如果包在 packagist 上可用,请不要添加 VCS 存储库。它只会减慢速度。


对于无法通过 packagist 获得的包,请使用 VCS(或 git)存储库,如您的问题所示。当您这样做时,请确保:

  • “存储库”字段在根 composer.json 中指定(它是仅根字段,忽略所需包中的存储库定义)
  • 存储库定义指向有效的 VCS 存储库
  • 如果类型是“git”而不是“vcs”(如你的问题中所示),请确保它实际上是一个 git 存储库
  • 您有一个有问题的软件包require
  • 中的约束与 VCS 存储库提供的版本匹配。您可以使用 来查找可用版本。在这种情况下,这将是一个不错的选择。requirecomposer show <packagename>~2.3
  • 中的名称与远程 中的名称匹配。在本例中,它是 。requirecomposer.jsongedmo/doctrine-extensions

下面是通过 VCS 存储库安装同一包的示例:composer.json

{
    "repositories": [
        {
            "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
            "type": "git"
        }
    ],
    "require": {
        "gedmo/doctrine-extensions": "~2.3"
    }
}

VCS存储库文档很好地解释了所有这些。


如果有 git(或其他 VCS)存储库具有可用资源,请不要使用“包”存储库。包存储库要求您提供定义中的所有元数据,并将完全忽略所提供的 dist 和源中存在的任何元数据。它们还具有其他限制,例如在大多数情况下不允许进行适当的更新。composer.jsoncomposer.json

避免使用包存储库(另请参阅文档)。


答案 2

在2013年撰写本文时,这是实现这一目标的一种方法。Composer 添加了对更好方法的支持:请参阅 @igorw 的答案

您有存储库吗?

Git,Mercurial和SVN由Composer支持。

您是否具有对存储库的写入权限?

是的?

存储库是否具有 composer.json 文件

如果您有可以写入的存储库:添加文件或修复现有文件,并且不要使用以下解决方案。composer.json

转到@igorw的答案

仅当您没有存储库或存储库
没有 composer.json 且您无法添加它时,才使用此

这将覆盖 Composer 可能能够从原始存储库中读取的所有内容,包括软件包的依赖项和自动加载。composer.json

使用该类型会将正确定义所有内容的负担转移到您身上。更简单的方法是在存储库中有一个文件,然后使用它。packagecomposer.json

此解决方案实际上仅适用于极少数情况,即您有无法更改的废弃ZIP下载,或者只能读取但不再维护的存储库。

"repositories": [
    {
        "type":"package",
        "package": {
          "name": "l3pp4rd/doctrine-extensions",
          "version":"master",
          "source": {
              "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
              "type": "git",
              "reference":"master"
            }
        }
    }
],
"require": {
    "l3pp4rd/doctrine-extensions": "master"
}

推荐