Etiquetas

miércoles, 2 de febrero de 2011

Tutorial Básico SubVersioN

Imaginad un supuesto teórico. Sois programadores. O escritores. O cualquier clase de persona que trabaje con texto. Incluso con imágenes.
Cada uno vive en un continente. África, Europa, Milán y Oceanía.
Y hay un problema. Cómo trabajamos todos en un proyecto común?
Fácil una carpeta compartida. CLAAAAAAROOOOO.
Hasta que llega algún ser...ehm..irrespetuoso y borra todo.
Además, y si no tengo conexión cuando trabajo? Cuándo lo subo? Y si otro también sube lo suyo y me borra lo mío?

Para eso se inventó el control de versiones.
En qué consiste esto?
Bueno, hablaré de SVN, que es, por así decirlo, la evolución de CVS.
Un control de versiones, básicamente, sirve para controlar versiones de un programa...xD
Yo subo un archivo al servidor. Ahora todos pueden descargarlo. Cuando lo descargan, en una copia especial llamada copia de trabajo, ellos trabajan, y "actualizan" archivo. No lo reemplazan, sino que el servidor SVN guarda las modificaciones realizadas sobre el archivo en cada "actualización", de forma que en cualquier momento se puede volver atrás y recuperar versiones previas.
Además, permite mantener un log de los cambios realizados y por quién.

Lo importante, el tutorial. Lo he simplificado hasta niveles insospechados, que conste. No voy a hablar de la creación de un repositorio, ni configuración del servidor, porque la mayoría de nosotros no lo gastaremos jamás(total, ya lo hace google).

Supongamos tenemos un repositorio en un.ejemplo.com, y se encuentra en la carpeta /svn/repos

Lo primero es crear una copia de trabajo. Simplemente es una carpeta que contiene la información sobre el repositorio y sus archivos.

[host1:~] moot% svn co https://un.ejemplo.com/svn/repos workcopy --user moot

Esto crea una copia de trabajo en ~/workcopy en nuestro ordenador identificándonos como moot. La opción co viene de checkout, que también podéis utilizar, pero es más larga.
A partir de ahora, todas las operaciones de svn que realicemos se harán sin poner la dirección o el usuario.

Supongamos que queremos subir una carpeta al repositorio. Bueno, no tenemos más que:
[host1:~/workcopy] moot% svn import /Docs/proyecto

Eso, si no recuerdo mal, sube todo lo que haya en proyecto al servidor. Ya tenemos archivos con los que queremos trabajar.
Ahora supongamos que somos nuestro amigo Milanés. Hicimos el checkout hace dos días, así que primero vamos a comprobar el estado del repositorio con:
[g_host:~/workcopy] Giacomo% svn status
A proyecto
A proyecto/main.pl
Esto significa que han añadido la carpeta proyecto con el archivo main.pl

Así que habrá que actualizar:
[g_host:~/workcopy] Giacomo% svn up
A proyecto
A proyecto/main.pl
At revision 15.

A decir verdad no sé si esta era la salida, ni en la anterior, pero no creo que se vaya mucho. (Ya hace un año que no gasto esto, y por desgracia no dispongo de un svn para realizar pruebas.)


Ahora nuestro amigo añade un makefile(sí, en perl, qué pasa?), y lo crea con el vim, escribe...y...bueno, aunque está en la workcopy, ese archivo no existe, habrá que añadirlo:

[g_host:~/workcopy/proyecto] Giacomo% svn add makefile

Está en el repositorio?? No. Ahora solo lo hemos añadido a la copia de trabajo. Ahora habrá que actualizar.

[g_host:~/workcopy] Giacomo% svn commit makefile

Esto realiza un commit, es decir, actualiza la versión del repositorio con nuestra versión. Ojo, con la opción -m "cadena" añadimos el mensaje cadena al log, si no, se abrirá nuestro editor por consola predeterminado(en mi caso vim, compadezco a los que tengan emacs..xD)

Y poco más. Acordaos de hacer un update antes de empezar a trabajar.

Otra cosa útil, svn log. Muestra el log, xD

A parte de eso, pueden compararse archivos entre versiones y demás. Con svn blame muestra los diferentes cambios realizados sobre un archivo en una misma revisión.

Otro día explicaré cómo resolver conflictos(dos usuarios actualizan a la vez) y las ventajas de svn lock cuando trabajas con compis como @diegoteborrolafuncionporquenolaentiendo.


Por supuesto, SVN viene instalado de serie en MacOs X y en el 99% de las distribuciones de Linux(alguna habrá que no la tenga para tocar las pelotas...-.-')



P.D.: Para los de 404link, he subido manuales de svn y sockets al dropbox, en concreto a la carpeta de la Evil Alliance.

No hay comentarios:

Publicar un comentario