SVN – La copia de trabajo está bloqueada

Es posible que mientras se esté haciendo un “comit” al SVN mediante algún programa como RapidSVN algo falle (o cerremos el programa accidentalmente) y el repositorio quede bloqueado.

Para solucionar este problema podemos hacer una limpieza mediante el comando:

svn cleanup

o bien usando el comando cleanup del programa con entorno gráfico de SVN que estemos usando. Por ejemplo, en el RapidSVN, se hace mediante Extras->Cleanup.

Crear una copia de nuestro proyecto sin las carpetas .SVN

Hace unos meses publiqué una entrada en la que explicaba cómo eliminar las carpetas .SVN de un proyecto. Algún usuario me ha pedido más información y un ejemplo sobre cómo crear una copia de un proyecto que usa Subversion pero sin las dichosas carpetas .SVN.

Tal y como comenté puede hacerse mediante el comando:

svn export repositorio directorio_detino

Para no complicarme la vida voy a poner un ejemplo práctico de un proyecto que tengo ahora. El proyecto se llama “uib” y está en mi memoria USB (que se monta como /media/KINGSTON) y está en la carpeta SVN. La copia sin las carpetas de Subversion va a estar en ‘/home/gorka/proyectos/uib_distro’. Por lo tanto el comando quedaría así:

svn export file:///media/KINGSTON/SVN/uib/trunk /home/gorka/proyectos/uib_distro

Ojo, yo uso la organización de directorios que comenté en este post sobre primeros pasos con SVN, por eso uso la carpeta ‘trunk’.

Y si el directorio destino (/home/gorka/proyectos/uib_distro) ya existiera habría que añadir al final la opción:

--force

Borrar todas las carpetas .SVN en Linux

Es muy sencillo gracias a la consola:

find . -name .svn -print0 | xargs -0 rm -rf

También se puede estraer una copia del SVN sin los directorios .svn:

svn export repositorio directorio_detino

Si el directorio destino ya existe podemos usar la opción –force.

Gracias a: http://textsnippets.com/posts/show/104

Primeros pasos con SVN (II)

En esta segunda entrega vamos a ver cómo usar un servidor SVN en MS Windows y cómo conectarse a él desde otra máquina.

En primer lugar debemos arrancar el servidor SVN:

svnserve -d -r c:\\svn

Ahora vamos a otra máquina e intentamos conectarnos al servidor SVN. Para eso creamos una carpeta de trabajo (por ejemplo c:\mis proyecto\base_gamma o, en Linux, /home/gorka/proyectos/base_gamma) y nos bajamos una copia del proyecto. Supongamos que el servidor tiene la IP 192.168.1.13 (esta tienes que sustituirla por la IP o el dominio de tu servidor):

svn co svn://192.168.1.13/base_gamma/trunk .

Se puede apreciar que la única diferencia entre trabajar con el servidor en el mismo PC o trabajar remotamente es que en lugar de conectarnos a:

file:///c:/svn/

nos conectamos usando:

svn://192.168.1.13/

Arrancar el servidor automáticamente

Para automatizar el arranque del servidor lo que he hecho ha sido crear un archivo ejecutable llamado arrancar.bat en la carpeta de repositorios (en este caso c:\svn) con el comando que hemos usado antes:

svnserve -d -r c:\\svn

y luego lo he llevado como acceso directo a Inicio->Programas->Inicio.

Existe también un servicio llamado SVNService que no he probado así que no puedo deciros cómo funciona, pero hay información en Google sobre el tema.

Usando contraseñas

Vamos a configurar el servidor de modo que se necesite una clave para poder acceder a él.

Comenzamos por editar el fichero svnserve.conf que está en el directorio conf de nuestro repositorio (en este caso c:\svn). Lo editamos y descomentamos las líneas (descomentar = quitar las # del principio de la línea):

password-db = userfile
realm = gamma

userfile es el fichero que contiene los datos de autentificación de los usuarios y realm es una etiqueta que definimos nosotros, en este caso gamma.

Si te fijas estas líneas están dentro de la sección [general] del fichero.

Guardamos el fichero, lo cerramos y abrimos userfile que está en el mismo directorio. Vamos a crear al usario ross y le vamos a crear como contraseña hulkmalo.:

[users]
ross = hulkmalo

Guardamos el fichero y lo cerramos.

Reiniciamos el servidor y ya debería funcionarnos correctamente.

Para conectarnos usamos:

svn co svn://192.168.1.13/base_gamma/trunk . ross hulkmalo

En la próxima entrega voy a hablar de algunos clientes de SVN como Tortoise SVN y RapidSVN.

Primeros pasos con SVN

Hoy me ha tocado poner en marcha, Subversion, un software de control de versiones en un servidor con Windows XP. Aprovecho para escribir este artículo con instrucciones para los primeros pasos.

Primero de todo descargamos la última versión de subversion desde la web oficial de Tigris, en mi caso la versión para Windows XP.

Una vez descargado el software la instalación es muy sencilla (como cualquier programilla de windows xp).

Vamos a usar como ejemplo un proyecto que tenemos en un directorio llamado “c:\mis proyectos\base_gamma” (sí, es mi proyecto ultra-secreto para crear supersoldados pero no se lo digas a la Masa).

El siguiente paso es crear lo que se llama un repositorio (abre una consola con Inicio->Ejecutar->cmd) y teclea:

svnadmin create c:\\svn

Ahora creamos una carpeta temporal para nuestro proyecto, por ejemplo: c:\temp\proyectos\base_gamma.

mkdir c:\\temp\\proyectos\\base_gamma

Es recomendable crear en la carpeta temporal estas tres subcarpetas:

trunk
tags
branches

Los archivos de nuestro proyecto debemos copiarlos al directorio trunk. Más adelante veremos el por qué de esta organización.

NOTA: Si aún no hemos comenzado el proyecto la carpeta trunk estará vacía evidentemente.

Luego tenemos que hacer la primera impotación de los archivos que queremos controlar con SVN. Para eso primero que tenemos que hacer es entrar en la carpeta donde está nuestro proyecto, en el ejemplo:

cd c:\\temp\\proyectos

y hacemos el import:

svn import base_gamma file:///c:/svn/base_gamma -m "Importación inicial"

Ahora podemos ver cómo ha quedado nuestro repositorio:

svn list c:\\svn\\base_gamma

Esto nos mostrará:

trunk/
tags/
branches/

Ahora tenemos que traer desde el servidor SVN una copia para empezar a trabajar. Para eso vamos a la carpeta c:\proyectos\base_gamma y tecleamos:

svn co file:///c:/svn/base_gamma/trunk/ .

ahora ya podemos empezar a trabajar con los ficheros en c:\proyectos\base_gamma\trunk

Un día de trabajo con SVN

Lo primero que debemos hacer cuando vamos a trabajar en un proyecto compartido con SVN es actualizar la copia que tenemos en nuestro ordenador con el comando update.

svn update

y se nos mostará la lista de ficheros actualizados.

Una vez actualizada nuestra copia podemos editar un fichero, por ejemplo “radiacion.c” (es el fichero que controla la candidad de radiación que debe recibir un sujeto para adquirir superpoderes 😛 ).

Además supongamos que también creamos el fichero “candidatos.c”. Tenemos que avisar al SNV de que existe este nuevo fichero:

svn add candidatos.c

Ojo, el fichero aún no ha sido enviado al repositorio. Sólo está marcado para enviar.

Una vez terminemos de trabajar tenemos que enviar los archivos modificados al repositorio con un commit:

svn commit -m "poner aquí cualquier comentario que de una idea de lo que hemos hecho"

Hasta ahora sólo hemos visto cómo trabajar en una misma máquina. En la próxima entrega explicaré cómo trabajar con un servidor-cliente. Mientras tanto podéis consultar el manual de SVN disponible gratuitamente en múltiples formatos.