Cómo requerir un tenedor con compositor

172

aquí está mi composer.json, quiero usar el tenedor del proyecto lessphp de Nodge en Github

 "repositories": [{
    "type": "package",
    "package": {
        "version": "dev-master",
        "name": "nodge/lessphp",
        "source": {
            "url": "https://github.com/Nodge/lessphp.git",
            "type": "git",
            "reference": "master"
        },
        "autoload": {
            "classmap": ["lessc.inc.php"]
        }
    }
}],
"require": {
    "php": ">=5.3.3",
    "nodge/lessphp": "dev-master"
},

Pero tengo este error cuando hago la actualización:

nodge / lessphp dev-master -> no se encontró un paquete coincidente.

No sé cómo requerirlo correctamente este tenedor ...

Alguna sugerencia ?

Neilime
fuente

Respuestas:

228

La forma más común (y más fácil) de hacerlo es usar un repositorio VCS.

Todo lo que tiene que hacer es agregar su bifurcación como repositorio y actualizar la restricción de versión para que apunte a su rama personalizada. Su nombre de rama personalizado debe tener el prefijo dev-.

Ejemplo suponiendo que parches el monólogo para corregir un error en la rama de corrección de errores:

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

Tenga en cuenta que no cambia la instrucción require excepto para especificar su rama de corrección de errores. Todavía hace referencia al paquete ascendente ( monolog/monolog), no a su bifurcación personal ( igorw/monolog). Puedes leer los detalles en los documentos

Seldaek
fuente
66
Esto no parece funcionar para github.com/Polycademy/purl, que es una bifurcación de github.com/jwage/purl que he estado tratando de: "repositorios": [{"type": "vcs", "url ":" [email protected]: Polycademy / purl.git "}], y" require ": {" jwade / purl ":" dev-master ",}, pero sigo obteniendo: Problema 1 - El paquete solicitado jwade / purl no se pudo encontrar en ninguna versión, puede haber un error tipográfico en el nombre del paquete.
CMCDragonkai
11
@CMCDragonkai intente ejecutarlo composer show jwade/purl -v, debería decirle por qué ignoró la versión dev-master si lo hace.
Seldaek
44
@seldaek me salvaste! ¡gracias! (Mi bifurcación se llamaba dev-dev- ..) no sabía que la denominación era automática.
Miguel Stevens
15
"Leer los documentos" es una mala respuesta, una mejor respuesta sería dar un ejemplo concreto
oskarth 05 de
77
Es bueno advertir sobre no hacer referencia al tenedor personal. Esto me salvó el día, +1
edrian
42

Usar VCS funciona:

"name": "test/test",
"repositories": [{
    "type": "vcs",
    "url": "http://github.com/Nodge/lessphp"
}],
"require": {
    "leafo/lessphp": "dev-master"
},

Pero si necesito un módulo que tenga esto composer.json, no funciona. Instala el proyecto original, no el tenedor.

Ejemplo

"name": "example/example",
"require": {
    "test/test": "dev-master"
},

Debo mencionar nuevamente el repositorio. ¿Eso es normal?

Neilime
fuente
mismo aquí mismo problema
Aysennoussi
Elimine manualmente el módulo utilizando "rm -rf" y luego "actualización del compositor". Eso funcionó para mí.
Hubert Perron
3
He usado una docena de tenedores, y esto nunca funcionó . Aquí hay una solución de trabajo: stackoverflow.com/a/27970559/183904
Julien
44
@Julien, acabo de usar este método y funcionó de maravilla ... Los documentos son bastante claros, solo debe recordar poner el prefijo dev- en el nombre de su rama personalizada cuando requiera el paquete en cuestión.
mTorres
2
Funcionó para mí ... pero quiero mencionar que necesitaba usar https: // para la URL.
plong0
33

Si no puede obtener la respuesta @Neilime para que funcione para usted, asegúrese de que su bifurcación use una rama diferente.

Por ejemplo, empuje sus cambios a una rama en su bifurcación llamada my-bugfix, no agregue el dev-prefijo en el nombre de su rama, pero en su composer.json debe agregarlo. Su archivo de compositor se verá así:

"repositories":
[
    {
        "type": "vcs",
        "url": "http://github.com/yourname/packageName"
    }
],
"require": {
    "owner/packageName": "dev-my-bugfix"
},
Boedy
fuente
1
¡Esta es una explicación ingeniosa y clara para mí! Gracias !
Dominik
1
pero ¿y si es el tenedor de otra persona ? Vea el ejemplo aquí
abbood el
Además, el namecampo en el composer.jsonarchivo de su repositorio bifurcado debe permanecer igual con el propietario original.
NecipAllef
11

He probado muchas opciones, pero después de recibir esta publicación vi la luz y funcionó perfectamente.

Esto es lo que tienes que hacer:

1- bifurcación de repositorio

2- Crea una rama y realiza las modificaciones necesarias.

3- Agrega la etiqueta del repositorio a tu composer.json

"repositories": [

        {
            "type": "vcs",
            "url": "https://github.com/user/yourforkname"
        }
    ]

4- En la línea de comando dentro de su proyecto requiera su bifurcación de esta manera:

composer require vendor/packagename:dev-branchname

¡¡Y voilá!!

Tienes tu versión de fork funcionando

Luis Mata B.
fuente
7

De acuerdo con la documentación de Composer http://getcomposer.org/doc/05-repositories.md#vcs , es suficiente especificar el repositorio original (no la bifurcación) en require("nodge / lessphp" en su caso). Composer luego instalará SU fork (mire el código en los proveedores)

Elvis Ciotti
fuente
5

Entonces, este es 2019, y la mayoría de las respuestas aquí ya son correctas.

Sin embargo, si se encuentra en una situación en la que necesita requerir una rama particular de su bifurcación (que creó), haga que el compositor enumere primero las versiones / etiquetas disponibles. Esto me ahorró mucho tiempo.

Un ejemplo completo con spatie/laravel-backuppaquete.

Primero, agregue la repositoriesclave a composer.json. Con la url de tu tenedor

"repositories": [{
   "type": "vcs",
   "url": "https://github.com/holymp2006/laravel-backup"
 }]

Obtenga versiones / etiquetas disponibles

composer show "spatie/laravel-backup" --all

Elija la versión que desea versionsen la salida del terminal, luego requiera esa versión

composer require spatie/laravel-backup:v5.x-dev
Sam
fuente
2

Por lo general, agrego un nodo "dist" a la definición del paquete. Nunca tuve problemas para usarlo de esta manera.

Sin embargo, no puedo recordar de dónde obtuve este truco para obtener más explicaciones.

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "version": "dev-master",
                "name": "nodge/lessphp",
                "source": {
                    "url": "https://github.com/Nodge/lessphp.git",
                    "type": "git",
                    "reference": "master"
                },
                "autoload": {
                    "classmap": ["lessc.inc.php"]
                },
                "dist": {
                    "url": "https://github.com/Nodge/lessphp/archive/master.zip",
                    "type": "zip"
                }
            }
        }
    ],
    "require": {
        "nodge/lessphp": "*"
    }
}
usuario3497737
fuente