Невозможно использовать удаленный репозиторий в композиторе в окнах
У меня есть репозиторий с библиотекой. Он может быть успешно клонирован.
$ git clone file:////remote/repo/library
$ cd library
$ composer validate
./composer.json is valid, but with a few warnings
Но похоже, что этот репозиторий не может быть использован через включение композитора.
...
"repositories": [
{
"type": "git",
"url": "file:////remote/repo/library"
}]
...
Попытка установить
$ composer install -vvv
...
Loading composer repositories with package information
Executing command (//remote/repo/library): git show-ref --tags
Executing command (//remote/repo/library): git branch --no-color --no-abbrev -v
Executing command (//remote/repo/library): git branch --no-color
Executing command (//remote/repo/library): git show "master":composer.json
[Composer\Repository\InvalidRepositoryException]
No valid composer.json was found in any branch or tag of
file:////remote/repo/library, could not load a package from it.
...
Как использовать удаленный репозиторий в окнах с композитором?
Ответы
Ответ 1
Composer сможет определить, какой VCS вы используете, поэтому вместо "type": "git"
попробуйте "type": "vcs"
(см. Документы композитора и этот SO ответ).
Вместо того, чтобы использовать клон git
, вы можете использовать его ссылка на путь, если вы просто хотите указать на локальный репозиторий клонирования или использования git -специфических операций (например, тегов версий и т.д.).
Также в Windows вам может потребоваться использовать форматирование в стиле Windows для пути репозитория/библиотеки (см. Composer - с использованием локального репозитория Комментарий SO), и если это общий диск Windows, возможно, вам потребуется проверить разрешения.
ИЗМЕНИТЬ
У меня был более глубокий взгляд на это и он смог воспроизвести поведение git clone
и composer install
довольно просто, просто просмотрев сетевое имя моего собственного ПК.
Попытка использовать синтаксис стиля Windows (т.е. file://\\\\remote\\repo\\library
) не сработала для меня, так как она где-то упала в середине процесса git.
Похоже, что некоторые именованные сетевые диски взаимодействуют внутри самого композитора: поскольку вы можете загружать репозитории на локальные диски, используя описанный синтаксис file://
, и можно правильно клонировать и извлекать файлы с сетевого диска, используя обычный //drive/repo
синтаксис и командная строка git
Я не уверен, что это обязательно разрешимо, не вникая в источник композитора (что было необходимо для кого-то, чтобы получить локальную поддержку Windows-диска).
Это означает, что настройка местоположения сетевого диска для сопоставления с буквой на вашем локальном компьютере (в соответствии с ответом smcjones) будет работать, так как это будет обрабатывается так же, как локальный привод Windows. Вы также можете добавить крючки, поскольку @smcjones указывает, хотите ли вы автоматически отображать/деактивировать диск (хотя вам придется не забывать назначать эту букву для чего-либо еще).
Предполагая, что у вас есть доступ к соответствующему компьютеру, настройка git daemon
на компьютере локальной сети, с которым вы хотите его обслуживать (используя этот ответ довольно простой, так что вы можете использовать версию протокола git://
работает очень хорошо, хотя в зависимости от вашей установки вам также может потребоваться убедиться, что ваш "minimum-stability"
flag установлен на "dev"
, и если вы не переносите HTTPS, вам может понадобиться найти файл конфигурации локального компоновщика (возможно, в C:\Users\Username\AppData\Roaming\Composer\config.json
) и добавить "secure-http": false
для обслуживания по сети без настройки SSL-сертификата (если вы не хотите его установить).
Ответ 2
Вы можете попробовать и добавить репозиторий пакетов аналогичный к этому
В основном вы определяете ту же информацию, которая включена в репозиторий композитора packages.json
, но только для одного пакета.
Опять же, минимальные обязательные поля: name
, version
и любой из dist
или source
.
(см. также этот пример)
Затем проверьте, не исчезла ли проблема.
На всякий случай, сначала проверьте, если:
Ответ 3
Если вы планируете использовать этот ресурс в качестве сервера репо или вытащите это репо из нескольких мест, вы можете пойти с Ответом Leith о настройке Git, или вы можете посмотреть настройку SSH-сервера в Windows 10. Они требуют дополнительной работы в сети для настройки.
Метод ниже может быть полезен для тех, кто просто пытается что-то скопировать и не хочет иметь дело с конфигурацией сервера или демонами. Он не требует доступа к привилегии сервера и просто требует, чтобы у вас был доступ к местоположению в вашей сети.
Самый быстрый способ действий - сопоставить сетевой диск вручную или автоматически. В командной строке, если вы хотите сопоставить "R":
net use R: \\remote\repo
В качестве альтернативы вы можете автоматически установить это с помощью функции компоновщика script
и создать небольшой .cmd файл, который будет выполнен в pre-update-cmd
и post-update-cmd
:
map_drive.cmd:
if not exist r: (
net use R: "\\remote\path\to\repo"
)
Вы можете сделать то же самое для post-update-cmd
и post-install-cmd
, чтобы отключить сетевой диск.
unmap_drive.cmd
if exist r: (
net use R: /delete
)
composer.json:
\..
"scripts": {
"pre-install-cmd": [
"map_drive.cmd"
],
"pre-update-cmd": [
"map_drive.cmd"
],
"post-install-cmd": [
"unmap_drive.cmd"
],
"post-update-cmd" [
"unmap_drive.cmd"
]
}
...
Теперь вы можете получить доступ напрямую.
\...
"repositories": [
{
"type": "git",
"url": "R:/library"
}]
...
Обратите внимание, что, хотя @Leith указал, что вместо R:/
вы должны использовать file://r/
, я обнаружил, что протокол file
не работая над моей установкой Windows. Используйте любой синтаксис для вас!
Если вы идете с этим методом патчей, или более сложный метод зависит от вашего приложения и использования. Запуск демона Git или SSH-сервера можно рассматривать как раздражение при определенных обстоятельствах и добавляет дополнительные накладные расходы. Если вы только собираетесь использовать это временно или спорадически, сценарии выше должны запускаться.
Ответ 4
сделайте что-то вроде ниже.
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/igorw/monolog"
}
],
"require": {
"monolog/monolog": "dev-bugfix"
}
}
Для получения дополнительной информации перейдите к ней Дополнительная информация