Composer php Composer:如何定义具有层次结构的内部Gitlab项目的存储库?

Composer php Composer:如何定义具有层次结构的内部Gitlab项目的存储库?,composer-php,repository,gitlab,Composer Php,Repository,Gitlab,我在本地Gitlab安装中有三个项目(p1、p2、p3)。项目p1需要p2,项目p2需要p3 p2/composer.json如下所示: { "name": "my-group/p2", ... "repositories": [ { "type": "vcs", "url": "ssh://git@git.local.dev/my-group/p3.git" } ], "co

我在本地Gitlab安装中有三个项目(p1、p2、p3)。项目p1需要p2,项目p2需要p3

p2/composer.json如下所示:

{
    "name": "my-group/p2",
    ...
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git@git.local.dev/my-group/p3.git"
        }
    ],
    "config": {
        "gitlab-token": {
            "gitlab.com": "my-token"
        }
    },
    "require": {
        "my-group/p3": "dev-develop"
    }
}
命令“composer install”适用于p2项目,没有任何问题

p1/composer.json如下所示:

{
    "name": "my-group/p1",
    ...
    "minimum-stability": "dev",
    "prefer-stable": true,
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git@git.local.dev/my-group/p2.git"
        }
    ],
    "config": {
        "gitlab-token": {
            "gitlab.com": "my-token"
        }
    },
    "require": {
        "my-group/p2": "dev-develop"
    }
}
命令“composer install”为项目p1显示以下错误消息:

$ composer install
...
Problem 1
  - Installation request for my-group/p2 dev-develop -> satisfiable by my-group/p2[dev-develop].
  - my-group/p2 dev-develop requires my-group/p3 dev-develop -> no matching package found.

根据,仅从根
composer.json
计算
存储库
选项。因此,如果您不通过satis或其他涵盖多个存储库的服务提供p3,这将不起作用。

根据,仅从根
composer.json
存储库
选项进行评估。因此,如果您不通过satis或其他涵盖多个存储库的服务提供p3,这将不起作用

以下composer.json起作用:

{
    "name": "my-group/p1",
    ...
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git@git.local.dev/my-group/p2.git"
        },
                {
            "type": "vcs",
            "url": "ssh://git@git.local.dev/my-group/p3.git"
        }
    ],
    "config": {
        "gitlab-token": {
            "gitlab.com": "my-token"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "require": {
        "my-group/p2": "dev-develop"
    }
}

问题是,我不知道项目p2需要什么,我不希望所有内部项目都在composer.json中。

以下composer.json可以工作:

{
    "name": "my-group/p1",
    ...
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git@git.local.dev/my-group/p2.git"
        },
                {
            "type": "vcs",
            "url": "ssh://git@git.local.dev/my-group/p3.git"
        }
    ],
    "config": {
        "gitlab-token": {
            "gitlab.com": "my-token"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "require": {
        "my-group/p2": "dev-develop"
    }
}

问题是,我不知道p2项目需要什么,我不希望所有的内部项目都在composer.json中。

谢谢@nico haase。我认为你的答案是正确的,因为它通常是正确的答案。但就我而言,情况并非如此。在我们当前的服务器上有一个ruby脚本,它循环遍历本地Gitlab安装中所有项目的所有分支和标记,如果它包含
composer.json
,则将其添加到我们的内部存储库中。但是应用程序不稳定,所以我想使用一些不同的东西。我可以测试satis,但恐怕不会更好。所以,如果您有一个通用存储库系统,为什么不链接它呢?如果您使用
ssh://git@git.local.dev/my group/p3.git
,您引用的是单个项目,而不是编写器存储库。如果您可以在任何地方提供一个
packages.json
并引用所有项目,那么您可能不会链接它,因为我试图找到一种方法,即如何在没有通用存储库系统的情况下安装需求。存储库系统非常不稳定,会导致部署问题。谢谢@nico haase。我认为你的答案是正确的,因为它通常是正确的答案。但就我而言,情况并非如此。在我们当前的服务器上有一个ruby脚本,它循环遍历本地Gitlab安装中所有项目的所有分支和标记,如果它包含
composer.json
,则将其添加到我们的内部存储库中。但是应用程序不稳定,所以我想使用一些不同的东西。我可以测试satis,但恐怕不会更好。所以,如果您有一个通用存储库系统,为什么不链接它呢?如果您使用
ssh://git@git.local.dev/my group/p3.git
,您引用的是单个项目,而不是编写器存储库。如果您可以在任何地方提供一个
packages.json
并引用所有项目,那么您可能不会链接它,因为我试图找到一种方法,即如何在没有通用存储库系统的情况下安装需求。存储库系统非常不稳定,会导致部署问题。