Используйте PHP composer для клонирования git repo
Я пытаюсь использовать композитор для автоматического клонирования репозитория git из github, которого нет в packagist но это не работает и я не могу выяснить, что я делаю неправильно.
Я думаю, что я должен включить его из "хранилища", например:
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
а затем, вероятно, перечислите его в разделе" require". Он должен быть похож на но это не работает. Это просто дает эту ошибку:
ваши требования не могут быть разрешены для устанавливаемого набора пакетов.
кто-нибудь уже пытался сделать что-то подобное?
7 ответов
на момент написания статьи в 2013 году это был один из способов сделать это. Композитор добавил поддержку лучших способов: см. @igorw ' s ответ
У ВАС ЕСТЬ ХРАНИЛИЩЕ?
Git, Mercurial, SVN поддерживается Composer.
У ВАС ЕСТЬ ДОСТУП ДЛЯ ЗАПИСИ В РЕПОЗИТОРИЙ?
да?
ЕСТЬ ЛИ В РЕПОЗИТОРИИ
если у вас есть репозиторий вы можете написать: добавить composer.json
файл или исправить существующий, и не используйте Решение ниже.
перейти к @igorw ' s ответ
ИСПОЛЬЗУЙТЕ ЭТО, ТОЛЬКО ЕСЛИ У ВАС НЕТ РЕПОЗИТОРИЯ
ИЛИ ЕСЛИ В РЕПОЗИТОРИИ НЕТ composer.json
И ВЫ НЕ МОЖЕТЕ ДОБАВИТЬ ЕГО
это переопределит все, что Composer может быть в состоянии прочитать из исходного репозитория composer.json
, включая зависимости пакета и автозагрузка.
С помощью package
type перенесет бремя правильного определения всего на вас. Более простой способ-иметь composer.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"
}
этот пакет на самом деле доступен через packagist. В этом случае вам не нужно пользовательское определение репозитория. Просто убедитесь, что вы добавили require
(что всегда необходимо) с соответствующим ограничением версии.
В общем, если пакет доступен на packagist, не добавить РЕПО VCS. Это просто замедлит процесс.
для пакетов, которые недоступны через packagist, используйте VCS (или git) хранилище, как показано в вашем вопросе. Когда вы это сделаете, убедитесь, что:
- поле "репозитории"указано в корневом композиторе.json (это корневое поле, определения репозитория из необходимых пакетов игнорируются)
- определение репозиториев указывает на допустимое РЕПО VCS
- если тип " git "вместо" vcs " (как в вашем вопросе), убедитесь, что это на самом деле git repo
- у вас
require
пакета в вопрос - ограничение в
require
соответствует версиям, предоставленным РЕПО VCS. Вы можете использоватьcomposer show <packagename>
найти доступные версии. В этом случае~2.3
было бы хорошим вариантом. - имя
require
соответствует имени в удаленномcomposer.json
. В этом случае этоgedmo/doctrine-extensions
.
вот пример composer.json
который устанавливает тот же пакет через РЕПО VCS:
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
на VCS repo docs объяснить все это довольно хорошо.
если есть репозиторий git (или другой VCS) с composer.json
доступны не используйте РЕПО "пакет". РЕПО пакета требуют, чтобы вы предоставили все метаданных в определении и полностью игнорировать любой composer.json
присутствует в предоставленном dist и источнике. Они также имеют дополнительные ограничения, такие как невозможность надлежащего обновления в большинстве случаев.
избежать пакет РЕПО (см. Также документы).
вы можете включить репозиторий git в composer.json вот так:
"repositories": [
{
"type": "package",
"package": {
"name": "example-package-name", //give package name to anything, must be unique
"version": "1.0",
"source": {
"url": "https://github.com/example-package-name.git", //git url
"type": "git",
"reference": "master" //git branch-name
}
}
}],
"require" : {
"example-package-name": "1.0"
}
просто скажи композитора на использование источник:
composer update --prefer-source
или:
composer install --prefer-source
затем вы получите пакеты как клонированные репозитории вместо извлеченных tarballs, поэтому вы можете внести некоторые изменения и зафиксировать их обратно. Конечно, если у вас есть разрешения на запись/push в репозиторий, и Composer знает о репозитории проекта.
отказ от ответственности: я думаю, что я могу ответить на немного другой вопрос, но это было то, что я искал, когда я нашел этот вопрос, поэтому я надеюсь, что он будет полезен и другим.
Если Composer не знает, где находится репозиторий проекта или проект не имеет надлежащего композитора.json, ситуация немного сложнее, но другие уже ответили на такие сценарии.
я столкнулся со следующей ошибкой:The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
если вы разветвляете другое репо, чтобы внести свои собственные изменения, вы получите новый репозиторий.
например:
https://github.com/foo/bar.git
=>
https://github.com/my-foo/bar.git
новый url-адрес необходимо будет перейти в раздел репозиториев вашего композитора.формат JSON.
помните, если вы хотите, обратитесь к вилке как my-foo/bar
в вашем разделе require вам придется переименовать пакет в composer.json
файл внутри вашего нового РЕПО.
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
если вы только что раздвоили самый простой способ сделать это, отредактируйте его прямо внутри github.
в моем случае я использую Symfony2.3.x и параметр минимальной стабильности по умолчанию "стабильный" (что хорошо). Я хотел импортировать РЕПО не в packagist, но имел ту же проблему "ваши требования не могут быть решены для устанавливаемого набора пакетов.". Оказалось, что композитор.json в репо я попытался импортировать, используя минимальную стабильность "dev".
Итак, чтобы решить эту проблему, не забудьте проверить minimum-stability
. Я решил это, потребовав dev-master
версия вместо master
как говорится в в должности.
Если вы хотите использовать composer.json
из GitHub вы бы посмотрели на (в разделе VCS).
раздел пакет для пакетов, которые не имеют composer.json
. Однако вы не последовали этому примеру, или это также сработало бы. Прочитайте, что он говорит о репозиториях пакетов:
В принципе, вы определяете ту же информацию, которая включена в
packages.json
, но только для одного пакета. Опять же, минимальные обязательные поля-это имя, версия и либо dist, либо source.