Repositorio SVN sobre SSH
Publicado por Miguel Ángel a las 15:05
Archivado en: Programación, Software Libre, Geek.
SVN es un sistema de control de versiones que está reemplazando desde hace tiempo a CVS. Ambos sistemas de control de versiones son muy útiles (y más que recomendables) para mantener centralizado y coordinado cualquier desarrollo entre varias personas o varios lugares, tanto para código como para documentación.
En su momento –the good old times– tenía repositorios CVS por todas partes y lo usaba extensivamente para mantener mis prácticas de programación, informes de prácticas en varios formatos y diversos proyectos de documentación y Software Libre. Aún conservo un repositorio CVS dentro del pendrive, pues SVN no está siempre disponible.
Hace un par de años escribí un artículo en el antiguo foro de la ETSII sobre Cómo no suicidarte si te cargas una práctica, con las instrucciones para tener un repositorio CVS en cualquier sistema en el que tengas acceso por SSH. Desgraciadamente este artículo se perdió junto con el resto del foro y no conservo copia.
Esta mañana, durante mi tercer intento accidentado de meter un proyecto en un repositorio SVN, me he tomado el tiempo de anotar aquí cómo hacerlo de la forma más portable que he encontrado: en una cuenta con acceso SSH. El método es prácticamente el mismo que en aquel difunto artículo, pero las herramientas de SVN tienen un uso y funcionamiento muy distinto al de las de CVS.
Para implementar esta receta se necesitan los siguientes ingredientes:
- Un sistema remoto con SVN instalado. En Debian es el paquete subversion.
- Una cuenta de usuario con acceso SSH a ese sistema remoto.
- Un directorio personal para esa cuenta de usuario donde los ficheros se conserven. Un scratch probablemente no sirva por ser perecedero.
Lo primero que hay que hacer es crear el repositorio. El respositorio SVN es un directorio con un contenido especial, que se crea con el comando svnadmin. Si este comando está disponible en la máquina remota, puedes entrar por SSH y crear el repositorio:
$ svnadmin create $HOME/svn
Esto crea el directorio $HOME/svn con un repositorio SVN vacío.
Si el comando svnadmin no está disponible en la máquina remota –como sucede en la ETSII– puedes crear el repositorio en tu máquina local y luego copiarlo por SSH:
$ cd /tmp $ svnadmin create svn $ scp -r svn/ alu3096@exthost.etsii.ull.es:
De todas formas, si en la máquina remota no está disponible el programa servidor de SVN (svnserve) –como sucede en la ETSII– esto no servirá de mucho, pues sin el programa servidor el repositorio no se puede utilizar.
Lo siguiente es importar el directorio del proyecto al repositorio:
$ svn import -m "Firewall de aulas" sslsf svn+ssh://miguev@bundy.dreamhost.com/home/miguev/svn/sslsf Password: Adding sslsf/debian Adding sslsf/debian/control ... Adding sslsf/Makefile Committed revision 1.
A partir de ahora no utilizas el directorio original,
sino que te descargas el módulo del SVN y trabajas sobre él:
$ mv proyecto proyecto-original $ svn checkout svn+ssh://miguev@bundy.dreamhost.com/home/miguev/svn/sslsf Password: A sslsf/debian A sslsf/debian/control ... A sslsf/Makefile Checked out revision 1.
Para dejarlo un poco más claro, explico a continuación –muy brevemente– la sintaxis de los comandos svn import y svn export:
svn import -m "Mensaje" proyecto protocolo://usuario@servidor/ruta/al/repositorio/proyecto
svn checkout protocolo://usuario@servidor/ruta/al/repositorio/proyecto
- El “Mensaje” se añadirá a los registos (logs) de los ficheros que subas al repositorio. Conviene escribir mensajes explicativos, del tipo “Arreglado bug #365″.
- El proyecto es el directorio que se importa (sube) al repositorio. Conviene eliminar todos los ficheros temporales y limpiarlo antes de subirlo.
- La parte menos clara de estos comandos es la URL del proyecto dentro del repositorio. Vamos por partes:
- El protocolo mediante el que se accede al repositorio puede ser http para bajar repositorios públicos, file para trabajar con repositorios locales (otro día escribo sobre eso) o en este caso svn+ssh para utilizar el programa svnserve en el servidor autenticando el usuario mediante SSH.
- Obviamente, usuario@servidor son el nombre de la cuenta de usuario y el nombre del servidor al que se accede. No tiene que ser necesariamente una dirección de e-mail.
- La ruta al repositorio /ruta/al/repositorio/ (con barras al principio y al final) es la ruta absoluta hacia el repositorio.
- Justo después de la ruta al repositorio se añade el nombre del proyecto o módulo que se está importando (subiendo) o exportando (bajando). Si no se especifica esto, los ficheros se subirán al directorio raíz del repositorio, lo cual normalmente no es nada deseable.
Y esto es todo, a partir de aquí trabajamos con la copia local de trabajo que además de los ficheros originales contiene información sobre el repositorio, de modo que no hay necesidad de volver a teclear esa horrorible URL. Tal vez otro día escriba una receta similar para llevar un repositorio SVN en un pendrive.



Jake a las 13:13 del 22 de Febrero de 2006.
Probado y funcionando ahora mismo en mi casa.
Quizá faltó añadir que para guardar en el repositorio los cambios que se van haciendo hay que usar:
svn commit -m "Mensaje para el log de revisiones"
desde dentro del directorio de trabajo local que se ha descargado previamente.
miguev a las 13:48 del 22 de Febrero de 2006.
Claro, sólo pretendía apuntar la receta para levantar el repositorio, usarlo es un tema aparte del que no me he preocupado porque se parece lo suficiente al manejo del CVS como para no necesitar aprender nada nuevo para un uso sencillo.
Sin embargo, usos no tan básicos como merzclar dos ramas, recuperar versiones antiguas o resolver conflictos no son igual que en CVS, así que probablemente acabe apuntando eso también
Jake a las 13:57 del 22 de Febrero de 2006.
Se agradece igualmente este tutorial, para conocer las intimidades del SVN, mejor leerse esto:
http://svnbook.red-bean.com/
maxi (panzer) a las 04:03 del 10 de Marzo de 2006.
olle men te pasaste con tu espacio exelente te aprecio por el grana aporte pero te agradeceria si tubieras manuales en pdf html word o lo que sea para mandarlos a mi mail gracias de ante mano
miguev a las 11:45 del 10 de Marzo de 2006.
¿Manuales de qué? (me ahorro la broma)
Jake a las 02:26 del 18 de Marzo de 2006.
olle men tiene rason aqi el colegua estaria vien que pucieras halgun manualo mejor en word que otra cosa porque yo la berdad es que esto no lo tengo todo controlado y los pdfs esos no los beo vien con mi pece ni tampoco los hmtl esos que ni se lo que son y tanvien tiene rason en eso de que te pasastes con tu espasio aunque yo no entiendo mucho de eso que lo significa la berdad es que tampoco entiendo entiendo vien esto pero olle si al otro lo entiendes a mi tanvien ok men
miguev a las 12:55 del 18 de Marzo de 2006.
:-D