Que es eso de los repositorsios SVN?

Nunca había usado un repositorio para control de versiones, ¡para qué! si mis proyectos son muy pequeños… que iluso, no sabía lo que me perdía. Estoy usando Subversión (SVN) para dos proyectos en los que estoy trabajando y volver al tar gz se me va a hacer muy duro… Por eso, me he propuesto aprender a configurar y usar SVN bien, y ya que aprendo, escribirlo para que otros lo puedan aprovechar.

Voy a escribir según vaya aprendiendo, osea que iré actualizando continuamente (ya sé, tendría que instalarme un wiki, pero prefiero hacerlo cuando tenga svn, y de paso, escribir también como lo hago :-). Cualquier cosa que veáis que está mal/mejorable, me comentáis y actualizo.

Empezando a lo fácil, voy a aprender a usarlo como repositorio de archivos, para usarlo como sitio central donde guardar mis archivos (documentos, fotos, artículos…)

De está manera:

  • no volveré a perder todos los contactos que tenía guardados en un archivo de texto, ni los apuntes de clase de primero de la uni, ni las fotos del viaje a Oviedo.
  • podré tener todo lo que necesite en cualquier ordenador que esté usando, sin pensar en cual lo guardé
  • si hago cambios en un documento y borro algo que luego me doy cuenta que necesito, podré recuperar la copia anterior. (como con Ctrl+Z pero sobre archivos guardados)
  • no necesitaré acceder por SSH ni nada por el estilo al PC donde tengo los datos, los descargo una vez, y ya puedo usarlos, hasta que tenga que subir o bajar cambios

¿qué es SVN?

SVN en la wikipedia:

Subversion es un software de sistema de control de versiones diseñado específicamente para reemplazar al popular CVS, el cual posee varias deficiencias. Es software libre bajo una licencia de tipo Apache/BSD y se le conoce también como svn por ser ese el nombre de la herramienta de línea de comandos. Una característica importante de Subversion es que, a diferencia de CVS, los archivos versionados no tienen cada uno un número de revisión independiente. En cambio, todo el repositorio tiene un único número de versión que identifica un estado común de todos los archivos del repositorio en cierto punto del tiempo.

Vamos, un sistema para llevar nota de todos los cambios que hagas en cierto listado de archivos y poder volver a copias anteriores de forma sencilla. Además de posibilitar la colaboración de varias personas sobre los mismos archivos, manteniendo un cierto orden.

Instalandolo en el servidor (Ubuntu-linux o parecidos)

Si no quieres liarte con configuraciones de servidor, puedes usar servicios que ofrecen webs como unfuddle, con el que pasarías al punto «El primer checkout o primera descarga» directamente.

La instalación en el servidor tiene varias opciones, pero nosotros vamos a hacerlo funcionar con el demosnio svnserve. Si queréis ver otras opciones, aquí tenéis un manual muy bueno sobre Subversion.
Para ir poco a poco, en el servidor, lo primero que hacemos es instalar Subversion:

apt-get install subversion

Y una vez instalado, lanzamos el demonio:

svnserve -d -r /home/txurdi/repositorios

Incluso podemos ponerlo en el crontab para que arranque si reiniciamos el servidor.

crontab -e
@reboot svnserve -d -r /home/txurdi/repositorios

Ojo, si tienes, firewall, IPTables o algo de eso, da permisos al puerto 3690. En el tutorial de slicehost, lo hacen añadiendo esta línea en las iptables:

-A INPUT -p tcp --dport 3690 -j ACCEPT

Creando un proyecto nuevo

Lo primero de todo, es crear el/los repositorio/s en el servidor:

cd /home/txurdi
mkdir repositorios
svnadmin create repositorios/repo_doc
svnadmin create repositorios/repo_fotos

Y subir los contenidos que queramos al repositorio (solo la primera vez)
(suponed que en «/media/disco/documentos» tengo todos mis documentos importantes y en «/media/disco/fotos» mis fotos)

svn import /media/disco/dosumentos file:///home/txurdi/repositorios/repo_doc/documentos/trunk -m "Primera subida de documentos"
svn import /media/disco/fotos file:///home/txurdi/repositorios/repo_fotos/fotos/trunk -m "Primera subida de fotos"

Con eso, ya tenemos todos los contenidos en el/los repositorio/s y podríamos borrar «/media/disco/documentos» y «/media/disco/fotos» (aunque yo no lo borraría por si acaso todavía).

Configurándolo un poquito

El archivo de configuración es muy sencillito:

/home/txurdi/repositorios/repo_doc/conf/svnserve.conf

La configuración que he puesto yo:

# svnserve configuration
[general]
password-db = /home/txurdi/repositorios/repo_doc/conf/passwd
anon-access = read
auth-access = write
realm = Docs de txurdi

Ahora escribir el archivo de pass que halláis enlazado: (/home/txurdi/repositorios/repo_doc/conf/passwd)

[users]
project1admin = mypassword

Instalándolo en el cliente (Ubuntu-linux o parecidos)

apt-get install subversion

El primer checkout o primera descarga

Esto depende un poco de la configuración del servidor, puesto que podría ser snvserve, ssh, http etc., pero si estás en la misma máquina:

cd /home/txurdi
svn checkout file:///home/txurdi/repositorios/repo_fotos/fotos/trunk documentos
svn checkout file:///home/txurdi/repositorios/repo_doc/documentos/trunk fotos

Esto nos creará 2 carpetas «documentos» y «fotos» en «/home/txurdi», con los archivos que habíamos subido antes.
En este caso el checkout lo hemos hecho usando «file:///», pero podría ser usando «svn://» o «https://» … dependiendo de la configuración del servidor que hayamos elegido y del ordenador desde el que estemos accediendo:

cd /home/txurdi
svn checkout svn:///home/txurdi/repositorios/repo_fotos/fotos/trunk documentos
svn checkout svn:///home/txurdi/repositorios/repo_doc/documentos/trunk fotos

o si tenemos configurado svn con ssh:

cd /home/txurdi
svn checkout svn+ssh:///home/txurdi/repositorios/repo_fotos/fotos/trunk documentos
svn checkout svn+ssh:///home/txurdi/repositorios/repo_doc/documentos/trunk fotos

Si el puerto SSH del servidor está modificado, habrá que decirselo al SVN, por lo que en la máquina cliente, tenemos que editar el archivo:

/home/txurdi/.subversion

de la siguiente manera:

svn_doc_ssh = /usr/bin/ssh -p num_puerto -l usuario

(claro, cambia num_puerto y usuario…)
A eso creo que se le llama hacer un tunnel, y una vez configurado (puedes tener tantos como quieras) para acceder a ese repositorio, podrías hacerlo así:

svn co svn+svn_doc_ssh://123.45.67.890/home/txurdi/repositorios/repo_doc/trunk mis_docs

Ojo, hay que usar la ruta absoluta cuando se accede con svn+ssh

De aquí en adelante

Ya que tenemos nuestra copia de trabajo, podemos trabajar sobre ella normalmente, y cuando hagamos un cambio que queramos quede guardado en el servidor:

cd /home/txurdi/documentos
svn add . --force            (sólo cuando añadamos archivos)
svn commit -m "Describimos un poco el cambio que hemos hecho."

Además de subir los cambios, si estamos varias personas usando los mismos archivos o nosotros mismos hemos hecho el checkout en varios ordenadores, de vez en cuando (yo cojo la costumbre de hacerlo cada vez que abro un documento) tenemos que descargar los cambios hechos por el resto, para tener la última versión del documento, para eso, simplemente:

cd /home/txurdi/documentos
svn up"

Programas para no tener que usar la consola

  • Para Linux, KDESvn (KDE)
  • Para MacOSX SvnX, RapidSVN o Zigversion
  • Para Windows, TortoiseSVN

De donde he aprendido…

Os dejo aquí estos enlaces por si queréis saber más, que tampoco es plan de hacer una tesis sobre el tema…

2 respuestas a «Que es eso de los repositorsios SVN?»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.