No se puede usar el repository remoto en un compositor en Windows

Tengo un repository con la biblioteca. Podría ser clonado exitosamente.

$ git clone file:////remote/repo/library $ cd library $ composer validate ./composer.json is valid, but with a few warnings 

Pero parece que este repository no se puede usar a través de una inclusión de compositor.

 ... "repositories": [ { "type": "git", "url": "file:////remote/repo/library" }] ... 

Intentando instalar

 $ 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. ... 

¿Cómo usar un repository remoto en Windows con un compositor?

Solutions Collecting From Web of "No se puede usar el repository remoto en un compositor en Windows"

Composer podrá determinar qué tipo de VCS está usando, así que en lugar de "type": "git" , intente con "type": "vcs" (consulte los documentos de Composer y esta respuesta SO ).

En lugar de utilizar un clon git , podría usarlo por reference de ruta si solo desea apuntar al repository local en lugar de clonarlo o usar operaciones específicas de git (como tags de versión, etc.).

También en Windows puede necesitar usar el formatting de estilo de Windows para la ruta del repository / biblioteca (vea Compositor, usando un comentario SO de repository local ), y si es una unidad compartida de Windows, es posible que deba verificar los permissions.

EDITAR

Tuve un análisis más profundo de esto, y pude reproducir el comportamiento de composer install git clone y del composer install bastante facilidad, incluso con solo mirar el nombre de la networking de mi propia PC.

Intentar usar la syntax del estilo de Windows (es decir, file://\\\\remote\\repo\\library ) no funcionó para mí, ya que se cayó en el medio del process git en alguna parte.

Parece que hay algunos problemas relacionados con las unidades de networking nombradas que interactúan dentro del propio compositor: ya que puede cargar repositorys en discos locales usando la syntax file:// descrita y es posible clonar correctamente y recuperar files de una unidad de networking utilizando el normal //drive/repo syntax de //drive/repo y git command-line No estoy seguro de si esto es necesariamente solucionable sin profundizar en la fuente del compositor (que era lo que tenía que pasar para que alguien obtuviera soporte para la unidad local de Windows ).

Esto significa que la configuration de la location de su unidad de networking para asignar a una letra en su máquina local (según la respuesta de smcjones ) también funcionará, ya que se trataría igual que una unidad de Windows local. También puede agregar ganchos como señala @smcjones si desea mapear / desasignar automáticamente la unidad (aunque deberá recordar no asignar esa letra a ninguna otra cosa).

Asumiendo que tienes acceso a la computadora relevante, configurar un git daemon en la computadora de la networking local desde la que deseas servirlo (usando esta respuesta es bastante sencillo) para que puedas usar la versión de protocolo git:// funciona bastante bien, aunque Dependiendo de su configuration, también puede necesitar asegurarse de que su bandera de "minimum-stability" esté configurada en "dev" y si no está transportando a través de HTTPS, puede que necesite search el file de configuration del compositor local (probablemente en C:\Users\Username\AppData\Roaming\Composer\config.json ) y agregue "secure-http": false para que se C:\Users\Username\AppData\Roaming\Composer\config.json en la networking sin configurar un certificate SSL (a less que desee configurarlo).

Puede intentar y agregar un repository de packages similar a este

Básicamente, usted define la misma información que está incluida en los packages.json del repository del compositor, pero solo para un solo package.
Nuevamente, los campos mínimos requeridos son name , version y cualquiera de dist o source .

(Ver también este ejemplo )

Luego verifica si el problema persiste.

Por las dudas, verifique primero si:

  • borrar carpetas de vcs (es decir ~/.composer/cache/vcs/* o C:\Users\Me\AppData\Local\Composer\vcs ) ayuda.
  • no hay post de ejecución automática

Si está planeando usar este recurso compartido como server de repo, o retira este repository desde múltiples ubicaciones, le conviene ir con la respuesta de Leith sobre la configuration de un daemon Git, o puede ver la configuration del server SSH en Windows 10. Estos requiere trabajo adicional en la networking para configurarlo.

El siguiente método puede ser útil para alguien que simplemente está intentando parchar algo y no quiere lidiar con la configuration del server o los daemons. No requiere acceso a los privilegios del server, y solo requiere que tenga acceso a la location en su networking.

El curso de acción más rápido será mapear su unidad de networking, de forma manual o automática. En la línea de command, si quieres mapear a "R":

 net use R: \\remote\repo 

Alternativamente, puede configurarlo automáticamente utilizando la funcionalidad del script del compositor y crear un pequeño file .cmd para ejecutar en pre-update-cmd y post-update-cmd :

map_drive.cmd:

 if not exist r: ( net use R: "\\remote\path\to\repo" ) 

Puede hacer lo mismo para post-update-cmd y post-install-cmd para desasignar la unidad de networking.

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" ] } ... 

Ahora puedes acceder directamente.

 \... "repositories": [ { "type": "git", "url": "R:/library" }] ... 

Tenga en count que, aunque @Leith ha señalado que debe usar file://r/ en lugar de R:/ , encontré que el protocolo de file no funcionaba en mi configuration de Windows. ¡Usa la syntax que funcione para ti!

Si elige este método de parche o un método más complejo depende de su aplicación y uso. La ejecución de un daemon git o server SSH puede verse como una molestia en ciertas circunstancias y agrega más sobrecarga. Si solo tiene la intención de usar esto de forma temporal o esporádica, los scripts anteriores deben hacer que se ejecute.

haz algo como abajo …

 { "repositories": [ { "type": "vcs", "url": "https://github.com/igorw/monolog" } ], "require": { "monolog/monolog": "dev-bugfix" } } 

Para más información, contáctalo Más información