Я пытаюсь использовать композитор для автоматического клонирования git-репозитория из github, который не находится в пакете, но он не работает, и я не могу понять, что я делаю неправильно.
Я думаю, что я должен включить его среди «репозиториев» так:
"repositories": [ { "url": "https://github.com/l3pp4rd/DoctrineExtensions.git", "type": "git" } ],
а затем, вероятно, перечислите его в разделе «require». Он должен быть похож на этот пример, но он не работает. Он просто дает эту ошибку:
Ваши требования не могут быть решены с помощью устанавливаемого набора пакетов.
Кто-нибудь пытался сделать что-то подобное?
На момент написания в 2013 году это был один из способов сделать это. Композитор добавил поддержку лучших способов: см. Ответ @igorw
У ВАС ЕСТЬ РЕПОЗИТОРИЯ?
Git, Mercurial, SVN поддерживается Composer.
ВЫ НАПИСАЛИ ДОСТУП К РЕПОЗИТОРУ?
Да?
У РЕПОЗИТАРИИ есть файл composer.json
Если у вас есть репозиторий, вы можете написать: Добавить файл composer.json
или исправить существующий, и НЕ использовать приведенное ниже решение.
Перейдите к ответу @igorw
ТОЛЬКО ИСПОЛЬЗУЙТЕ ЭТО, ЕСЛИ ВЫ НЕ ИМЕЕТЕ РЕПОЗИТОРИЯ
ИЛИ ЕСЛИ РЕПОЗИТОРИЯ НЕ ИМЕЕТ composer.json
И ВЫ НЕ ДОЛЖНЫ ДОБАВЛЯТЬ ЭТО
Это заменит все, что Composer может прочитать из composer.json
оригинального репозитория, включая зависимости пакета и автозагрузку.
Использование типа package
переносит бремя правильного определения всего на вас. Более простой способ – иметь файл 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" }
Этот пакет фактически доступен через упаковщика . В этом случае вам не нужно настраивать определение репозитория. Просто убедитесь, что вы добавили require
(которое всегда необходимо) с соответствующим ограничением версии.
В общем случае, если пакет доступен в пакете, не добавляйте репозиторий VCS. Это просто замедлит работу.
Для пакетов, которые недоступны через упаковщик, используйте репозиторий VCS (или git), как показано в вашем вопросе. Когда вы это сделаете, убедитесь, что:
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 полностью объясняют это.
Если есть репозиторий git (или другой VCS) с доступным composer.json
Json, не используйте репозиторий «пакет». Пакет repos требует, чтобы вы предоставили все метаданные в определении и полностью игнорировали любой 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
Затем вы получите пакеты как клонированные репозитории вместо извлеченных архивов, чтобы вы могли внести некоторые изменения и скопировать их обратно. Конечно, если у вас есть права на запись / push в репозиторий, а Composer знает о репозитории проекта.
Отказ от ответственности: я думаю, что могу ответить на немного другой вопрос, но именно этого я и искал, когда нашел этот вопрос, поэтому надеюсь, что он будет полезен и другим.
Если 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
pack.json репозитория композитора, но только для одного пакета. Опять же, минимальные обязательные поля – это имя, версия и любой из dist или source.