Используйте 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.json
FILEесли у вас есть репозиторий вы можете написать: добавить
composer.json
файл, или исправить существующий, и не используйте Решение ниже.перейти к @igorw ' s ответ
ИСПОЛЬЗУЙТЕ ЭТО ТОЛЬКО ЕСЛИ У ВАС НЕТ РЕПОЗИТОРИЯ
ИЛИ ЕСЛИ В РЕПОЗИТОРИИ НЕТcomposer.json
И ВЫ НЕ МОЖЕТЕ ДОБАВИТЬ ЕГОэто переопределит все, что композитор может быть в состоянии прочитать из исходного репозитория
composer.json
, включая зависимости пакета и автозагрузка.С помощью
package
тип перенесет бремя правильного определения всего на вас. Самый простой способ-иметь в репозитории, и просто использовать его.это решение действительно только для редких случаев, когда у вас есть заброшенная загрузка 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" } }
The 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 в репозиторий, а композитор знает о репозитории проекта.
отказ от ответственности: я думаю, что я могу ответить на немного другой вопрос, но это было то, что я искал, когда я нашел этот вопрос, поэтому я надеюсь, что он будет полезен и другим.
Если композитор не знает, где находится репозиторий проекта, или проект не имеет надлежащего композитора.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
как говорится в post.
Если вы хотите использовать
composer.json
из GitHub вы бы посмотрели на (в разделе VCS).раздел пакет для пакетов, которые не имеют
composer.json
. Однако вы также не последовали этому примеру, иначе это тоже сработало бы. Прочитайте, что он говорит о репозиториях пакетов:В принципе, вы определяете ту же информацию, которая включена в репозиторий композитора
packages.json
, но только для одного пакета. Опять же, минимальные обязательные поля-это имя, версия и либо dist, либо source.