Использовать PHP-композитор для клонирования git repo

Я пытаюсь использовать композитор для автоматического клонирования 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), как показано в вашем вопросе. Когда вы это сделаете, убедитесь, что:

    • Поле «репозитории» указано в корневом файле composer.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 полностью объясняют это.


    Если есть репозиторий 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.