Lo primero sera instalar subversion, esto lo haremos mediante el instalador de paquetes apt-get
# sudo su - # apt-get install subversion
Ya que tenemos instalado subversion, pasaremos a leer un poco de teoria:
Subversion sirve para gestionar un repositorio de archivos y sus distintas versiones. Un repositorio no es nada más que un sitio donde guardar ficheros. No nos importa cómo se guardan, sino cómo se accede a estos ficheros. Normalmente se usa una base de datos.
Pero la idea es que un repositorio es como un directorio, al que le puedes pedir los ficheros que tenía hace un mes, o hace 2 días. Es capaz de recuperar el estado de los mismos a partir de la base de datos.
Así, como usuario, lo importante es poder recuperar distintas versiones ( en especial las últimas ) y poder actualizar el repositorio con una versión nueva.
Realmente alguna de estas cosas se puede hacer con metainformación. Es decir, información sobre la propia información que está guardando el repositorio. Así, que aparte de los ficheros, el repositorio debe guardar cuando llegaron hasta él, por cuántas versiones distintas ha pasado, y este tipo de información que le permita cumplir su objetivo.
A diferencia de CVS, Subversion hace las revisiones globales del repositorio.
Esto quiere decir, que un cambio en un fichero no introduce un salto de versión únicamente en este fichero, sino en todo el repositorio ( que avanza una _revisión_ )
Vamos a realizar una serie de ejercicios a modo de ejemplo sobre el uso básico de SVN. Luego iremos incrementando el orden de dificultad hasta montar un servidor sencillo de SVN.
Lo primero que hay que hacer es crear nuestro repositorio. A tal efecto, podemos ir preparando el sistema para hacerlo de la forma correcta.
# mkdir -p /home/pianodaemon/svnroot # svnadmin create /home/pianodaemon/svnroot/ProyectoPato
Ahora la necesidad que me surge es subir mi software a mi repositorio recien creado….. para esto mi software se llama softwarepatito, mi software patito inclulle un fichero de texto Readme.txt es todo.
Entonces la forma como lo subiria al repositorio seria la siguiente:
# cd /home/pianodaemon/softwarepatito/ && ls Readme.txt
$ cd /home/pianodaemon/softwarepatito/ $ svn import file:///home/pianodaemon/svnroot/ProyectoPato -m"Version Inicial" Adding README.txt Committed revision 1.
El comando import de svn, lo que hace es copiar todo el árbol de directorios actual desde el que nos encontramos, como primera versión del repositorio.
Con la opción -m, le hemos dado el mensaje de Log directamente. Si no usamos la opción -m, entonces se abrirá el editor por defecto del sistema y tendremos la oportunidad de escribir ahí. Si no se escribe nada, entonces subversion da la opción de abortar.
El subdirectorio /home/pianodaemon/softwarepatito/ (el directorio inicial de nuestro software) ahora ya no es una copia de trabajo que provenga del repositorio… por lo que podriamos decir que ya no esta al dia. De hecho, no sirve para nada más. Así, que podemos borrarla sin temor:
# rm -rf /home/pianodaemon/softwarepatito/
Vamos ahora a obtener nuestra Copia Local. Esto es de gran importancia, porque es el directorio de trabajo, desde donde se supone vamos a ir subiendo los cambios hacia el repositorio. Para ello se usa el comando checkout de svn.
# cd /home/pianodaemon/ # svn checkout file:///home/pianodaemon/svnroot/ProyectoPato $ ls -l total 4 drwxr-xr-x 3 pianodaemon users 4096 2004-05-12 16:44 ProyectoPato
Por cierto, también puedes querer copiarlo con otro nombre.
# svn checkout file:///home/pianodaemon/svnroot/ProyectoPato DuckProyect # ls -l # total 8 drwxr-xr-x 3 pianodaemon users 4096 2004-05-12 16:44 ProyectoPato drwxr-xr-x 3 pianodaemon users 4096 2004-05-12 16:44 DuckProyect
Bueno… hasta este punto creo que he sido muy claro… Bueno. Empecemos a ver un poco mas de como usar subversion en base a las necesidades que surgen durante el desarrollo.
Hablando un poco mas en castellano… digamos que a nuestro desarrollo le necesitamos agregar un segundo fichero de texto…. entonces lo hacemos por que no hay de otra,… pero este cambio requiere subirce al servidor de subversion, esto se tiene que hacer para que otros usuarios puedan disponer tambien de este fichero de texto en sus respectivas copias de ProyectoPato que han bajado ellos a sus ordenadores para desarrollar la parte que les toca del software( ya que hablamos de un grupo de frekees desarrollando en grupo ).
Aqui muestro como genero el segundo fichero de texto Readme2.txt (este podria ser un fichero de c, python, o algun otro lenguaje de programacion ):
$ cd /home/pianodaemon/ProyectoPato/ $ echo "Segundo fichero de pruebas" > Readme2.txt $ svn add Readme2.txt A Readme2.txt $ svn commit -m"Nuevo fichero agregado" Adding Readme2.txt Transmitting file data . Committed revision 2.
Como se puede observar, una vez dentro de una copia local, NO es necesario indicarle la ruta al repositorio, pues ya la conoce. svn add realmente no añade el fichero al repositorio, simplemente lo marca para añadir. El que ejecuta la operación finalmente es el comando svn commit. Advierta que ahora estamos en la revisión 2 del código.
Vamos a modificar un fichero de estos. Le añadadiremos una línea.
$ cd /home/pianodaemon/ProyectoPato/ $ echo "Esto es otra linea" >> Readme.txt
Y subimos los cambios
$ svn commit -m"Linea añadida" Sending Readme.txt Transmitting file data . Committed revision 3.
Vamos a probar otra cosa interesante…. con este comando, svn diff podemos ver las diferencias entre el repositorio y
nuestra copia local.
$ echo "Otra Nueva Linea" >> Readme.txt svn diff Index: Readme.txt =================================================================== --- Readme.txt (revision 3) +++ Readme.txt (working copy) @@ -1,2 +1,3 @@ Mi primer fichero en SVN Nueva Linea +Otra Nueva Linea
