Подтвердить что ты не робот

Как использовать конкретный тег/версию с композитором и приватным хранилищем git?

У меня есть пакет пакетов на Gitlab моей компании. Я хочу запросить определенную версию этих пакетов, но каждый раз, когда я пытаюсь, композитор загружает последнюю фиксацию ведущей ветки.

composer.json:

{
"config": {
    "vendor-dir": "private/class"
},
"name":"MyProject",
"repositories": [
    {
        "type": "vcs",
        "url": "[email protected]:user/project.git"
    }
],
"require": {
    "user/project": "v0.5.0"
},
"type":"project"}

Структура репозитория моего пакета:

  • тег v0.5.0: commit dd6ed3c8...
  • совершить X, Y, Z
  • тег v0.7.0: commit 15293ac6...
  • last commit f15600a1...

Когда я выполняю "установку композитора":

Загрузка репозиториев композитора с информацией о пакете

Установка зависимостей (включая require-dev)

Проанализировано 69 пакетов для решения зависимостей

Проанализировано 67 правил для решения зависимостей

  • Установка пользователя/проекта (dev-master f15600a)

    Клонирование f15600a1

Он загружает только последнюю фиксацию.

Как я могу настроить файл composer.json моего проекта на использование определенного тега?

4b9b3361

Ответ 1

Как потребовать определенный тег Git?

Измените требование к версии на dev-master, а затем хеш # и имя тега Git, например. v0.5.0, например:

"require": {
    "vendor/package": "dev-master#v0.5.0"
}

Как требовать определенного Git commit?

Измените требования к версии на dev-master, а затем хеш # и ссылку на Git commit, например. dd6ed3c8, так:

"require": {
    "vendor/package": "dev-master#dd6ed3c8"
}

Ссылка: https://getcomposer.org/doc/04-schema.md#package-links


Определите свой собственный пакет и установите версию и ссылку

Альтернативой работе с репозиториями "type": "vcs" является определение пользовательского пакета "type": "package" внутри репозиториев и работа со ссылкой.

Ссылка - это либо хэш-код Git commit, либо имя тега или ветки, например origin/master.

Это привяжет version к определенному commit reference, в этом случае dd6ed3c8.

"repositories": [
  # ...
  {
    "type": "package",
    "package": {
      "name": "vendor/package",
      "version": "v0.5.0",
      "source": {
        "url": "[email protected]:vendor/project.git",
        "type": "git",
        "reference": "dd6ed3c8"
      }
    }
  }
]

Ответ 2

Потяните тегом git:

{
  "repositories": [
    {
      "type": "git",
      "url": "https://gitlab.xxx.com/some/repo.git"
    }
  ],
  "require": {
    "some/repo": "1.0.2"
  }
}

Потяните последним git commit:

{
  "repositories": [
    {
      "type": "git",
      "url": "https://gitlab.xxx.com/some/repo.git"
    }
  ],
  "require": {
    "some/repo": "dev-master"
  }
}

Вытяните конкретный git commit:

{
  "repositories": [
    {
      "type": "git",
      "url": "https://gitlab.xxx.com/some/repo.git"
    }
  ],
  "require": {
    "some/repo": "dev-master#68696f39"
  }
}

Добавить репозиторий через Composer Cli и вытащить последний git commit:

composer config repositories.repo git https://gitlab.xxx.com/some/repo.git
composer require "some/repo:dev-master"
composer update

Ответ 3

Вы можете использовать конкретный хэш версии после "#", например:

require": {
    "user/project": "dev-master#31454f258f10329ae7c48763eb898a75c39e0a9f"
}

см. https://getcomposer.org/doc/04-schema.md#package-links

Ответ 4

Чтобы запросить конкретную ветку, вы также можете просто dev- branchname:

"require": {
    "user/project" : "dev-my-branch"
},