svk
En la línea de la última entrada voy a comentar brevemente un ejemplo de uso / tutorial de svk.
svk está basado en el sistema de ficheros de subversion, está escrito en Perl y cuenta con varias mejoras que le permiten ser un decentralized version control system. Su principal objetivo es permitir a un desarrollador disponer de sus propias ramas privadas facilitando enormemente el proceso de merge.
La situación es la siguiente: disponemos de un repositorio central con un proyecto en el que estamos trabajando. Mediante svk vamos a hacer una copia del repositorio, vamos a mantenerlo actualizado y vamos a crear nuestra propia rama de trabajo.
Preparando nuestro entorno
En primer lugar crearemos un repositorio en el que vamos a guardar la copia del repositorio central:
svk depotmap --init
Este comando creará en ~/.svk/local un repositorio típico de subversion al que podremos acceder cómodamente mediante la ruta //.
Disponemos de // para guardar los proyectos que necesitemos, en este caso realizaremos una copia local de un proyecto externo.
svk mirror https://acm.asoc.fi.upm.es/svn/jurix/jailexec/trunk //jailexec
y para actualizar su contenido:
svk sync //jailexec
Durante el proceso de este comando veremos como svk descarga todo los commits realizados en el repositorio central y los replica en nuestro repositorio local, de esta forma conseguiremos disponer de una copia local de todo el repositorio (incluido historial y diferencias).
Importante: resaltar que utilizamos la ruta //jailexec para especificar el lugar en el que hacemos la copia.
Bien, ya tenemos todo lo necesario. Podemos desconectarnos de la red hasta que necesitemos o bien subir nuevos cambios o bien actualizarnos con los cambios del repositorio central.
El trabajo del día a día
Ahora crearemos nuestra copia local de trabajo, al igual que hacíamos con svn o cvs:
svk checkout //jailexec
Esto creará un directorio jailexec en el que tendremos una copia local de trabajo. Un detalle curioso es que no existen directorios especiales .svk ya que las copias de trabajo se gestionan internamente. Hay que tenerlo en cuenta a la hora de eliminar una copia de trabajo, un simple
rm -rf proyectono es recomendable.
A partir de aquí el ciclo de trabajo es el mismo. La única diferencia es que estamos trabajando contra un repositorio local –nuestra copia del repositorio central– por lo que algunos comandos tendrán comportamientos distintos.
- commit: si realizamos un commit contra nuestro repositorio svk forzará automáticamente el envio contra el repositorio central, es transparente al usuario.
- update: actualizaremos respecto a nuestro repositorio, por lo que si no realizamos un sync previo (apartado anterior) no tiene mucho sentido.
Manejo de ramas
Hasta el momento disponemos de una copia del repositorio central, vamos a trabajar con las ramas privadas:
svk cp -p //jailexec //local/jailexec
La opción -p es para crear //local.
Hemos creado //local/jailexec como una rama solamente disponible en nuestro repositorio local, nuestra rama privada.
svk checkout //local/jailexec
o
svk switch //local/jailexec
Nos prepara el entorno de trabajo sobre nuestra rama privada. A partir de ahora los cambios y el historial permaneceran en nuestro repositorio, sin conocimiento alguno del repositorio central.
Supongamos que hemos estado trabajando sobre una rama privada y queremos subir los cambios al repositorio central. Aquí svk nos facilita las cosas:
svk smerge //local/jailexec //jailexec
Este comando juntará ambas ramas de forma automática. No olvidemos que //jailexec es una copia del repositorio central por lo que al juntar ambas ramas se forzará el envio al repositorio central.
Con un solo comando podemos enviar todos los cambios que hemos realizado en nuestra rama privada
La única pega resulta ser la actualización de nuestra rama privada respecto a las actualizaciones del repositorio central:
svk sync //jailexec
svk smerge //jailexec //local/jailexec
svk up (en el directorio de nuestra copia local)
Actualizamos nuestro repositorio local y luego juntamos los cambios en nuestra rama local. Por último actualizamos nuestra copia local de trabajo.
Resumen
svk nos ofrece una estructura estupenda sobre la que trabajar y/o hacer copias de repositorios (oficialmente soporta Subversion, CVS y Perforcer) con una sintaxis idéntica a la de subversion.
El inconveniente es que el manejo resulta un poco complicado durante los primeros días.