En el momento de escribir este artículo en 2013, esta era una forma de hacerlo. Composer ha agregado soporte para mejores formas: vea la respuesta de @igorw
¿TIENES UN DEPÓSITO?
Composer admite Git, Mercurial y SVN.
¿TIENE ACCESO POR ESCRITO AL REPOSITORIO?
¿Si?
¿EL REPOSITORIO TIENE composer.json
ARCHIVO
Si tiene un repositorio en el que puede escribir: Agregue un composer.json
archivo o arregle el existente, y NO use la solución a continuación.
Ir a la respuesta de @igorw
UTILICE ESTO SOLO SI NO TIENE UN REPOSITORIO
O SI EL REPOSITORIO NO TIENE composer.json
Y NO PUEDE AGREGARLO
Esto anulará todo lo que Composer pueda leer del repositorio original composer.json
, incluidas las dependencias del paquete y la carga automática.
El uso del package
tipo transferirá la carga de definir correctamente todo sobre ti. La forma más fácil es tener un composer.json
archivo en el repositorio y simplemente usarlo.
Esta solución solo es para los casos excepcionales en los que tiene una descarga ZIP abandonada que no puede modificar, o un repositorio que solo puede leer, pero ya no se mantiene.
"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"
}
composer.json
, así que use un repositorio de vcs. Su ejemplo también rompe la carga automática e ignora elbranch-alias
.autoload
campo, no se incluirá. Básicamente, debe copiar y pegar toda la información decomposer.json
la definición del repositorio. El repositorio de VCS obtiene esa información directamente de VCS. Los beneficios debranch-alias
se explican en el documento de alias y en una publicación de blog que escribí .Ese paquete, de hecho, está disponible a través de packagist . En este caso, no necesita una definición de repositorio personalizada. Solo asegúrese de agregar un
require
(que siempre es necesario) con una restricción de versión coincidente.En general, si un paquete está disponible en packagist, no agregue un repositorio de VCS. Simplemente ralentizará las cosas.
Para los paquetes que no están disponibles a través de packagist, use un repositorio VCS (o git), como se muestra en su pregunta. Cuando lo haga, asegúrese de que:
require
paquete para el paquete en cuestión.require
coincide con las versiones proporcionadas por el repositorio de VCS. Puede utilizarcomposer show <packagename>
para buscar las versiones disponibles. En este caso~2.3
sería una buena opción.require
coincide con el nombre en el control remotocomposer.json
. En este caso, lo esgedmo/doctrine-extensions
.Aquí hay una muestra
composer.json
que instala el mismo paquete a través de un repositorio de VCS:Los documentos de repositorio de VCS explican todo esto bastante bien.
Si hay un repositorio de git (u otro VCS) con un repositorio
composer.json
disponible, no use un repositorio de "paquetes". Los repositorios de paquetes requieren que proporciones todos los metadatos en la definición e ignorarán por completo cualquiercomposer.json
presente en la fuente y dist proporcionados. También tienen limitaciones adicionales, como no permitir actualizaciones adecuadas en la mayoría de los casos.Evite repositorios de paquetes ( consulte también los documentos ).
fuente
composer.json
.require
campo debe ser especificado.The VCS repo docs explain all of this quite well.
... ¿qué?Puede incluir el repositorio de git en composer.json de esta manera:
fuente
composer.json
archivo si es posible.Solo dile al compositor que use la fuente si está disponible:
O:
Luego, obtendrá los paquetes como repositorios clonados en lugar de archivos tar extraídos, por lo que puede realizar algunos cambios y confirmarlos. Por supuesto, suponiendo que tenga permisos de escritura / inserción en el repositorio y que Composer conozca el repositorio del proyecto.
Descargo de responsabilidad: creo que puedo responder una pregunta un poco diferente, pero esto era lo que estaba buscando cuando encontré esta pregunta, así que espero que también sea útil para otros.
Si Composer no sabe dónde está el repositorio del proyecto, o si el proyecto no tiene el composer.json adecuado, la situación es un poco más complicada, pero otros ya respondieron esos escenarios.
fuente
Me estaba encontrando con el siguiente error:
The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Si está bifurcando otro repositorio para realizar sus propios cambios, terminará con un nuevo repositorio.
P.ej:
La nueva URL deberá ir a la sección de repositorios de su composer.json.
Recuerde que si desea hacer referencia a su bifurcación como
my-foo/bar
en la sección de requisitos, tendrá que cambiar el nombre del paquete en elcomposer.json
archivo dentro de su nuevo repositorio.Si acaba de bifurcar, la forma más fácil de hacerlo es editarlo directamente dentro de github.
fuente
name
atributo dentrocomposer.json
.En mi caso, uso Symfony2.3.xy el parámetro de estabilidad mínima es por defecto "estable" (lo cual es bueno). Quería importar un repositorio no en packagist pero tenía el mismo problema "Sus requisitos no se pudieron resolver en un conjunto de paquetes instalable". Parecía que el composer.json en el repositorio que intenté importar usaba un "dev" de estabilidad mínima.
Entonces, para resolver este problema, no olvide verificar el
minimum-stability
. Lo resolví requiriendo unadev-master
versión en lugar de lamaster
que se indica en esta publicación .fuente
"dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
.Si desea utilizar un
composer.json
archivo de GitHub, consulte este ejemplo (en la sección VCS).La sección del paquete es para paquetes que no tienen la extensión
composer.json
. Sin embargo, no siguió ese ejemplo tan bien o también habría funcionado. Lea lo que dice sobre los repositorios de paquetes:fuente
Intento unir las soluciones mencionadas aquí, ya que hay algunos puntos importantes que deben enumerarse.
Como se menciona en la respuesta de @ igorw, la URL del repositorio debe estar especificada en ese caso en el archivo composer.json, sin embargo, dado que en ambos casos el composer.json debe existir (a diferencia de la segunda forma de @Mike Graf), publicarlo en el Packagist es no es muy diferente (además, Github actualmente proporciona servicios de paquetes como paquetes npm), la única diferencia en lugar de ingresar literalmente la URL en la interfaz de packagist una vez que se registra.
Además, tiene el inconveniente de que no puede depender de una biblioteca externa que utilice este enfoque, ya que las definiciones de repositorio recursivas no funcionan en Composer. Además, debido a esto, parece haber un "error", ya que la definición recursiva falló en la dependencia, volver a especificar los repositorios explícitamente en la raíz no parece ser suficiente, pero también todas las dependencias de los paquetes deberían ser respecificado.
Con un archivo de compositor (contestado el 18 de octubre de 2012 a las 15:13 igorw)
Sin archivo de compositor (contestado el 23 de enero de 2013 a las 17:28 por Mike Graf)
fuente