Usar PHP composer para clonar repositorio de git


Estoy tratando de usar composer para clonar automáticamente un repositorio git desde github que no está en packagist pero no está funcionando y no puedo averiguar qué estoy haciendo mal.

Creo que tengo que incluirlo entre los "repositorios"así:

"repositories": [
    {
        "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
        "type": "git"
    }
],

Y luego probablemente lo listen en la sección "require". Debería ser similar a este ejemplo pero no funciona. Solo da este error:

Sus requisitos no se pudieron resolver a un conjunto de paquetes instalables.

¿Alguien ha intentado hacer algo como esto ya?

Author: kenorb, 2012-10-18

7 answers

En el momento de escribir esto en 2013, esta era una forma de hacerlo. Composer ha añadido soporte para mejores maneras: Ver la respuesta de @igorw

¿TIENES UN REPOSITORIO?

Git, Mercurial, SVN está soportado por Composer.

¿TIENE ACCESO DE ESCRITURA AL REPOSITORIO?

Sí?

¿TIENE EL REPOSITORIO UN ARCHIVO composer.json

Si tiene un repositorio, puede escribir en: Agregue un archivo composer.json, o corrija el existente, y NO utilice la solución a continuación.

Ir a la respuesta de @igorw

SOLO USE ESTO SI NO TIENE UN REPOSITORIO
O SI EL REPOSITORIO NO TIENE UN composer.json Y NO PUEDE AGREGARLO

Esto anulará todo lo que Composer pueda leer del composer.json repositorio original, incluyendo las dependencias del paquete y la carga automática.

Usando el tipo package transferirá la carga de definir correctamente todo a usted. La forma más fácil es tener un archivo composer.json en el repositorio, y simplemente usarlo.

Esta solución realmente solo es para los raros casos en los que tiene una descarga ZIP abandonada que no puede alterar, 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"
}
 83
Author: Mike Graf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:37

Ese paquete de hecho está disponible a través de packagist. No necesita una definición de repositorio personalizada en este caso. 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 VCS. Sólo ralentizará las cosas.


Para 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 hagas, asegúrate de que:

  • El campo "repositorios" se especifica en el editor raíz.json (es un campo solo raíz, se ignoran las definiciones de repositorio de los paquetes requeridos)
  • La definición de repositorios apunta a un repositorio VCS válido
  • Si el tipo es " git "en lugar de" vcs " (como en tu pregunta), asegúrate de que sea un repositorio de git
  • Tiene un require para el paquete en cuestión
  • La restricción en el require coincide con las versiones proporcionadas por el repositorio VCS. Puede usar composer show <packagename> para encontrar las versiones disponibles. En este caso ~2.3 sería una buena opción.
  • El nombre en el require coincide con el nombre en el control remoto composer.json. En este caso, es gedmo/doctrine-extensions.

Aquí hay un ejemplo composer.json que instala el mismo paquete a través de un repositorio de VCS:

{
    "repositories": [
        {
            "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
            "type": "git"
        }
    ],
    "require": {
        "gedmo/doctrine-extensions": "~2.3"
    }
}

Los documentos repo de VCS explican todo esto bastante bien.


Si hay un repositorio git (u otro VCS) con un composer.json disponible, no use un "paquete" repo. Los repositorios de paquetes requieren que proporcione todos de los metadatos en la definición y ignorará completamente cualquier composer.json presente en la dist y fuente proporcionadas. También tienen limitaciones adicionales, como no permitir actualizaciones adecuadas en la mayoría de los casos.

Evite los repositorios de paquetes ( vea también los documentos).

 113
Author: igorw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-18 10:54:27

Puedes incluir el repositorio git en composer.json como este:

"repositories": [
{
    "type": "package",
    "package": {
        "name": "example-package-name", //give package name to anything, must be unique
        "version": "1.0",
        "source": {
            "url": "https://github.com/example-package-name.git", //git url
            "type": "git",
            "reference": "master" //git branch-name
        }
    }
}],
"require" : {
  "example-package-name": "1.0"
}
 36
Author: Edris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-11 13:14:32

Solo dile al compositor que use la fuente si está disponible:

composer update --prefer-source

O:

composer install --prefer-source

Entonces obtendrá los paquetes como repositorios clonados en lugar de los archivos tarballs extraídos, por lo que puede hacer algunos cambios y confirmarlos de nuevo. Por supuesto, suponiendo que tenga permisos de escritura / inserción en el repositorio y Composer sepa sobre el repositorio del proyecto.

Descargo de responsabilidad: Creo que puedo responder a una pregunta un poco diferente, pero esto era lo que estaba buscando cuando encontré esta pregunta, así que espero que será útil para otros también.

Si Composer no sabe, dónde está el repositorio del proyecto, o el proyecto no tiene composer adecuado.json, la situación es un poco más complicada, pero otros ya respondieron a tales escenarios.

 2
Author: Josef Kufner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-24 23:18:30

Me encontré 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 hacer sus propios cambios, terminará con un nuevo repositorio.

Ej:

https://github.com/foo/bar.git
=>
https://github.com/my-foo/bar.git

La nueva url tendrá que ir a la sección repositorios de tu editor.json.

Recuerde que si desea referirse a su bifurcación como my-foo/bar en su sección require, tendrá que cambiar el nombre del paquete en el archivo composer.json dentro de su nuevo repositorio.

{
    "name":         "foo/bar",

=>

{
    "name":         "my-foo/bar",

Si usted acaba de bifurcar la forma más fácil de hacer esto es editarlo dentro de github.

 2
Author: Henry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 23:04:43

En mi caso, uso Symfony2.3.x y el parámetro de estabilidad mínima es por defecto "estable" (que es bueno). Quería importar un repositorio no en packagist pero tenía el mismo problema " Sus requisitos no se podían resolver a un conjunto instalable de paquetes.". Parecía que el compositor.json en el repositorio traté de importar el uso de un mínimo de estabilidad "dev".

Así que para resolver este problema, no olvides verificar el minimum-stability. Lo resolví requiriendo una versión dev-master en lugar de master como se indica en este post .

 2
Author: Magus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-14 23:25:01

Si quieres usar un composer.json de GitHub, mira este ejemplo (en la sección VCS).

La sección paquete es para paquetes que no tienen el composer.json. Sin embargo, no seguiste ese ejemplo también o también habría funcionado. Lea lo que dice sobre los repositorios de paquetes:

Básicamente, se define la misma información que se incluye en el repositorio de composer packages.json, pero solo para un solo paquete. Una vez más, los campos mínimos requeridos son nombre, versión, y cualquiera de dist o fuente.

 1
Author: Clarence,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-14 23:23:31