Как использовать конкретный тег/версию с композитором и приватным хранилищем 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 правил для решения зависимостей
Он загружает только последнюю фиксацию.
Как я могу настроить файл composer.json моего проекта на использование определенного тега?
Ответы
Ответ 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"
},