Minitutorial de subversion

Por popular demanda, voy a ilustrar en esta entrada el uso de subversion para el desarrollo colaborativo de software. Lo escribo teniendo en mente el desarrollo de paquetes alojados en R-Forge y para usuarios de sistemas operativos más o menos decentes. A quienes usan Windows les recomiendo Tortoise, cuyo uso queda fuera del alcance de lo que sigue.

En primer lugar, para los desavisados: subversion es un programa para gestionar versiones de ficheros. A usuarios particulares, les permite mantener fotos de tu trabajo (¿cómo estaba mi libro/tesis/código hace un mes?). Cuando varias personas trabajan en un mismo proyecto, les permite controlar quién ha hecho qué, cuándo y por qué; además, que cada uno de los integrantes del proyecto trabaje sobre su propia copia del código, aunque mandando su cambios a un repositorio central y recibiendo, claro está, los cambios del resto del equipo.

R-Forge proporciona a los desarrolladores un repositorio central de subversion. ¿Cómo se trabaja con él? En primer lugar, hay que hacer un checkout (descarga inicial) del contenido del código. Por ejemplo,

svn checkout svn+ssh://developername@scm.r-forge.r-project.org/svnroot/pxr

donde la URL apunta al repositorio en cuestión. Una vez hecho eso, se crea un directorio, pxr, con una copia del código existente en ese momento en el servidor.

Una sesión típica de desarrollo usando subversion consiste en:

    cd /my/svn/directory      # en este ejemplo, el directorio pxr
    svn update                # baja los cambios realizados por terceros
    ...                       # creas ficheros, editas, ¡trabajas!
    svn status                # muestra los ficheros que han cambiado,
                              # se han creado, etc.
    svn add /files/to/add     # si has creado ficheros nuevos
    svn ci -m "comentario"    # subes los cambios al servidor con un "commit" (ci)
                              # ¡importantísimo explicar en qué han
                              # consistido en el comentario!

Con esos comandos se resume el 95% de la interacción de los desarrolladores con subversion. Existen dos más de uso relativamente frecuente,

svn mv /objeto/a  /objeto/b
svn rm /objeto/obsoleto

para mover y borrar ficheros de manera que subversion quede notificado de los cambios realizados.

Existen muchos aspectos de subversion que no trata este minitutorial: cómo resolver conflictos (cuando dos desarrolladores cambian un mismo fichero a la vez), cómo realizar despliegues, etc. Pero sí que permite a un usuario novel comenzar a trabajar como Dios manda en menos de cinco minutos. Y el que quiera saber más, siempre puede acudir al tutorial por excelencia de subversion.