Ver índice de contenidos del libro

6.4. El tipo de repositorio vcs

VCS son las siglas en inglés de sistema de control de versiones. Entre otros, hace referencia a sistemas de versiones como Git, Subversion y Mercurial. Composer dispone de un tipo de repositorio especial para instalar paquetes utilizando estos sitemas.

6.4.1. Instalando paquetes desde un repositorio CVS

Existen varias situaciones en la que esto puede ser útil. La más común es para crear un fork de una librería desarrollada por terceros. Si utilizas una librería que debes modificar para tu proyecto, no puedes instalar la dependencia original sino la modificada.

Si la librería original se encuentra alojada en Github, sólo tienes que hacer un fork y realizar los cambios sobre este fork. Después, actualiza la dependencia en el archivo composer.json de tu proyecto. Si por ejemplo has hecho un fork de monolog, tu usuario de Github es igorw y la rama con tus cambios se llama bugfix, esta es la configuración que tienes que utilizar:

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

Si ahora ejecutas el comando update, Composer descargará tu paquete de monolog en vez del paquete original de monolog en Packagist.

Se recomienda mantener el nombre original del paquete a menos que vayas a mantener tu fork y olvidarte completamente del paquete original. Además, como los repositorios propios tienen preferencia sobre Packagist, Composer siempre instalará correctamente tu paquete en vez del paquete original. Aún así, si quieres modificar el nombre del paquete, es mejor que lo hagas en la rama por defecto del repositorio (normalmente se llama master), ya que de ahí es de donde se obtiene el nombre del paquete.

6.4.2. Utilizando repositorios privados

Si tus paquetes residen en repositorios privados de Github y Bitbucket, la forma de proceder es exactamente la misma:

{
    "require": {
        "vendor/my-private-repo": "dev-master"
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "[email protected]:vendor/my-private-repo.git"
        }
    ]
}

El único requisito adicional es que tienes que instalar las claves SSH para que el cliente de Git pueda acceder a esos repositorios.

6.4.3. Las alternativas a Git

Git no es el único sistema de control de versiones soportado por los repositorios de tipo vcs. En realidad, puedes utilizar cualquiera de estos sistemas:

Para poder instalar paquetes desde este tipo de repositorios, el único requisito es disponer de las aplicaciones cliente correspondientes. Como es posible que no tengas instaladas todas estas aplicaciones, Composer tiene un soporte especial para paquetes alojados en Github y Bitbucket.

En estos casos, Composer utiliza directamente la API de Github y Bitbucket, por lo que no es obligatorio que instales ninguna aplicación. Los repositorios de tipo vcs permiten instalar paquetes mediante dist a través de los archivos ZIP con los contenidos comprimidos del paquete.

El tipo concreto de control de versiones utilizado se infiere a partir de la URL del repositorio, pero si quieres explicitarlo en el archivo de configuración, cambia el tipo de repositorio vcs por git, svn o hg.

6.4.4. Opciones de Subversion

Como en Subversion no existe el concepto de ramas y etiquetas de forma nativa, Composer supone que el código se encuentra en $url/trunk, $url/branches y $url/tags. Si utilizas una estructura diferente en tu repositorio, puedes configurar estos valores. El siguiente ejemplo supone que la primera letra de cada directorio del repositorio está en mayúsculas, por lo que debes configurar los nuevos valores de esta forma:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "http://svn.example.org/projectA/",
            "trunk-path": "Trunk",
            "branches-path": "Branches",
            "tags-path": "Tags"
        }
    ]
}

Si tu repositorio no tiene ramas ni etiquetas, puedes desactivarlas estableciendo a false las opciones branches-path o tags-path respectivamente.

Si el paquete se encuentra en un subdirectorio (por ejemplo, /trunk/foo/bar/composer.json y /tags/1.0/foo/bar/composer.json) establece la opción "package-path" para que Composer pueda encontrarlo. En este ejemplo, el valor de la opción debería ser "package-path": "foo/bar/".