Невозможно использовать удаленный репозиторий в композиторе в окнах

У меня есть репозиторий с библиотекой. Он может быть успешно клонирован.

$ 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"
    }
}

Для получения дополнительной информации перейдите к ней Дополнительная информация