Я пытаюсь загрузить библиотеку, которую я разместил на BitBucket, используя композитор, как описано в официальной документации и здесь , но продолжайте получать следующую ошибку:
[Composer\Repository\InvalidRepositoryException] No valid composer.json was found in any branch or tag of [repository URL], could not load a package from it.
Вот мой проект composer.json:
{ "name": "Project name", "require": { "my-vendor/my-package": "dev-master" }, "repositories": [ { "type": "vcs", "url": [repository URL] } ] }
И вот композитор.json в моем удаленном репозитории (который, по-видимому, не может быть найден):
{ "name": "my-vendor/my-package", "version": "0.3", "autoload": { "psr-0": { "NS_": "src" } } }
Следует отметить, что оба файла composer.json находятся в корневом каталоге, как и должно быть.
Некоторые другие примечания:
Я также попробовал подход «не-композитор», в котором я указываю информацию о пакете в своем проекте composer.json и опускаю композитор.json из моего удаленного репозитория, как указано в документации . Это успешно клонирует основную ветвь, но затем приводит к следующей ошибке:
[RuntimeException] Failed to execute git checkout "master" && git reset --hard "master" fatal: Not a git repository (or any of the parent directories): .git
Тем не менее, пакет загружается в / vendor, как и ожидалось, поэтому я не уверен, почему он пытается проверить мастер снова.
Это не так, как я хочу решить эту проблему (поскольку я предпочел бы использовать composer.json в удаленном репозитории), но это может помочь выявить проблему в другом месте.
Спасибо за любую помощь.
РЕДАКТИРОВАТЬ
Мне удалось заставить его работать, ссылаясь на package.json через HTTP:
"repositories": [ { "type": "composer", "url": "http://localhost/packages.json" } ]
Package.json выглядит так:
{ "packages": { "vendor/my-package": { "dev-master": { "name": "vendor/my-package", "version": "dev-master", "source": { "url": [repository URL], "type": "git", "reference": "master" } } } } }
Это единственный способ заставить это работать? Кажется, немного переборщить, чтобы разместить мой собственный файл packages.json, если я только собираюсь использовать один или два внутренних пакета.
Несмотря на это, это дает мне ту же ошибку Git, о которой я говорил ранее.
EDIT 2
Принудительная ошибка (неверная кодовая фраза SSH) дает следующее:
[RuntimeException] Failed to execute git clone "[repository URL]" "C:\workspace\DFv3\vendor\vendor/my-package" && cd /D "C:\workspace\DFv3\vendor\vendor/my-package" && git remote add composer "[repository URL]" && git fetch composer
Поэтому я могу ясно видеть, что он здесь делает. Однако, похоже, после этой команды он запускает cd
s в каталог .git
и пытается запустить:
git checkout "master" && git reset --hard "master"
Предположительно, чтобы избавиться от экземпляра композитора, он потянул. Однако он работает в неправильном каталоге, и я не могу понять, почему ..
Вы не должны включать спецификацию version
в composer.json вашей библиотеки, если она фактически управляется поддерживаемой системой управления версиями. В настоящее время вы говорите, что ваша главная ветвь IS версии 0.3 (которая является стабильной версией), но вы пытаетесь включить «dev-master» (который является нестабильной версией). Композитор может запутаться, если это программное обеспечение действительно является «dev-master» или «version 0.3».
Если вы фактически разрабатываете новые версии для серии 0.3.x в своей основной ветке, вместо этого вы должны определить псевдоним ветки. Добавьте это в свою текущую ветку развития для версий 0.3.x:
"extra": { "branch-alias": { "dev-master": "0.3.x-dev" } }
Если вы хотите перейти к версии 0.4 или 1.0, вы должны вступить в «последнее» состояние серии 0.3 с ветвью с именем «0,3», а затем обновить композитор.json в главной ветви до точки dev- master к новому псевдониму (например, "dev-master": "0.4.x-dev"
). Вы также можете назвать свою ветку 0,3 как угодно, а затем добавить псевдоним для ветки THAT.
Это позволит вам потребовать последнюю версию версии 0.3.x следующим образом:
"require": { "my-vendor/my-package": "0.3.*@dev" }
Это вытащит последнюю версию версии 0.3, которая в настоящее время будет последней фиксацией в основной ветке из-за определенного псевдонима.
Способ, которым вы в настоящее время настроены, заставляет вас явно включать версию 0.3, которая является движущейся целью, не делая этот факт явно известным.
Предоставление явного тега версии должно выполняться только в том случае, если нет доступной системы контроля версий, которая может предоставить Composer номер версии, т. Е. Нет доступных тегов или теги не соответствуют требованию Composer для номеров версий. Поскольку вы, похоже, контролируете этот vcs, вероятно, рекомендуется создать теги в соответствии со стандартом Composers, вместо того, чтобы затруднить выпуск новой версии.
После того, как вы исправили это, я ожидаю, что ваша установка НЕ потребует файл package.json больше, потому что этот файл теперь исправляет проблемы, которые вы создали с помощью объявления этой версии. Вам также не понадобится эта композиционная ссылка, но она может вернуться к упоминанию исходного репозитория, как вы это делали.
Если вы считаете, что используете слишком много частных репозиториев, для которых требуется больше частных репозиториев, и вам не стоит упоминать их все в длинном списке, вы можете подумать об использовании Satis для создания такого списка найденных пакетов вместо их ручного создания.
У меня была такая же ошибка, после удаления папок из vcs все работает нормально
sudo rm -R ~/.composer/cache/vcs/*
В Windows (как предложил @Serbu):
Очистка директорий vcs, repo и файлов в папке C: \ Users \ Me \ AppData \ Local \ Composer \
Просто хочу отметить это, как здесь сказано. Кажется, запись реестра автозапуска, которую я имел для командной строки, мешала работе композитора.
Подробнее здесь:
Я знаю, что это немного устарело, но для некоторых, кто может столкнуться с этой проблемой, так оно и работает для меня.
Очистите кеш композитора.
composer clearcache
Повторите сценарий сборки satis.