SVN Externals: dependencias entre repos subversion

Arco
Los svn:external son una feature muy interesante de subversion, que permite que cuando descargas o actualizas una copia de un modulo automáticamente ‘tire’ de otros módulos que pueden estar en otros repositorios. Una especie de gestión automática de dependencias entre repos.

Es algo bastante sencillo, usaremos las propiedades de SubVersioN. En concreto “externals”. Los externals de svn son un conjunto de mappings entre un directorio local y una url que puede ser de cualquier cosa que se pueda traer mediante svn.

Esto puede serte útil si, por ejemplo, necesitas construirte una copia de trabajo que contenga directorios de diferentes repositorios, o del mismo repositorio, pero de diferentes localizaciones.

Para ello, simplemente editamos “los externals” del directorio en concreto:

$ svn propedit svn:externals .

Lo que nos lanzará un editor de texto en el que podemos poner los mappings, de la siguiente manera:

dir_local url_destino

Cada línea será un directorio nuevo con el contenido que especifiquemos. También podemos ver los que ya existen con:

$ svn propget svn:externals

Existen versiones acortadas de los comandos: pget o pg, pset o ps y pedit o pe para propget, propset y propedit respectivamente.

Tiene algunas limitaciones: no se pueden colocar rutas relativas, ni usar ficheros como mappings. Al hacer commit, sólo se realiza en la copia de trabajo principal, no en las externas.

Posible problema

En los enlaces externos que usan ssh, por defecto determina que el nombre de usuario sea el local (igual que si haces ssh host sin especificar el nombre de usuario). Puedes modificar este comportamiento añadiendo los nuevos hosts en el archivo ~/.ssh/config y especificando ahí el nombre de usuario para el servidor concreto al que se refieres el “external”:

Host repo.example.com
     User Pepito.Grillo

Referencias