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…
Deja una respuesta