viernes, 16 de mayo de 2008

Trabajando con subversion

Cuando se habla de teletrabajo o trabajo en grupos en programacion, generalmente se habla de un control de versiones, para que los programadores no pisen el trabajo de otros, y no necesiten usar el ftp constantemente para editar algo. Tambien resulta muy importante para liberar una versión estable y seguir trabajando en una versión de prueba, o para recuperar versiones de los archivos, es común que alguien cambie algo y resulte que ese cambio no era correcto, y si lo era el que estaba antes, con el versioando solo tendríamos que volver a una versión anterior.


Recuerdo hace un tiempo entre en una empresa que trabajaba con CVS, había leído algo al respecto pero no me había metido en el tema. En ese entonces el entorno de trabajo era un windows 98, y usabamos winCvs para el control de versiones, eramos 5 programadores, 3 en Argentina y dos en USA. Y el trabajo era totalmente coordinado, si tuvimos 3 problemas con pisadas de archivos estoy exagerando, y en los casos que paso algo fue error de algún programador ( yo me mande dos de esas tres :P ).

CVS quedo un poco en el tiempo, ahora se habla sobre SVN que es una versión mejorada de este sistema.
El mecanismo del svn es simple. Se crea un repositorio el acceso al respositorio puede ser publico o privado, una vez creado el repositorio en el servidor, es necesario que se haga un checkout por única vez, para configurar todo el entorno de trabajo. Una vez hecho el checkout solo tenemos que hacer commit para agregar cambios al repositorio y que otro se lo pueda actualizar, y update para actualizar dependiendo de los cambios que tenga el repositorio.

Cabe aclarar que cuando uno hace un svn update, o svn commit no se suben todos los archivos, sino únicamente los que tienen cambio, previamente comparando que no haya versiones posteriores a las nuestras en dicho caso nos va pedir que hagamos un update antes de hacer el commit. Otro dato importante es que los commit solo se hace sobre los archivos que están en el repositorio, si nosotros creamos un archivo localmente y queremos subirlo al repositorio para que este dentro del control de versiones primero agregamos el archivo al repositorio y despues hacemos el commit.

SVN desde Linux.

En los ejemplos yo estoy usando Ubuntu.

Lo primero que tenemos que hacer es conseguir la url de algún repositorio para probar podemos usar uno de prueba de google code tienen el buscador de proyectos, pueden elegir cualquiera y van a la solapa de source, y copian en el porta papeles ( ctrl + c ) la url del sistema

Supongamos que nuestro locahost, apunta a /var/www/. Desde la consola vamos hasta esta carpeta. Una vez en este path escribimos el siguiente comando para hacer nuestro primer checkout.

$ sudo svn co http://dominiodelrepositorio.com nombre_carpeta_proyecto

Cuando damos enter nos pueden salir 3 errores.

1- Error 1: Que el svn no esta instalado, para solucionar esto desde nuestra consola escribimos la siguiente linea

$ sudo apt-get install subversion

Este ejemplo es para los paquetes .deb para los rpm tienen que consultar como instalar SVN.

Una vez instalado volvemos a ejecutar nuestra linea para hacer el checkout.

2- Error 2: Que el repositorio no exista, vamos a chequear la url. Si este es el caso, es porque no existe esa url o no es un repositorio.

3- Error 3: Que la carpeta exista y contenga un proyecto subversionado.
En el caso que una carpeta ya contenga una versión de este o de otro proyecto no vamos a poder hacer el checkout, tenemos dos opciones, borramos la carpeta con todo su contenido, o guardamos nuestro proyecto en otra carpeta.

Sino surgió ninguno de estos errores, la consola tendría que mostrar que esta descargando archivos, y al finalizar nos tiene que decir la versión del sistema.

Una vez finalizado el checkout controlamos que nuestro proyecto este funcionando. Es probable que tengamos que configurar los datos de la base de datos que use el proyecto para que funcione correctamente, en este caso configuramos lo que sea necesario, y en localhost/proyecto/ tendríamos que ver el contenido.

Ya deberíamos tener el proyecto corriendo en nuestro sistema sin ningún problema.

Agregando cambios.

Después de revisar un poco el código se dieron cuenta que había un error, y deciden editarlo.
En forma local lo editan, con el IDE que mas le guste.
Una vez solucionado el problema, decidimos subirlo al repositorio para que el próximo que lo baje tenga el código corregido.

Para hacerlo nos posicionamos dentro del path del proyecto desde la consola

$ cd /var/www/proyecto/

Ejecutamos el commado commit, que podemos reemplazarlo por "ci". Y nos quedaría de la siguiente forma

$ sudo svn ci -m 'Corregimos un error en la carga de datos'

Hay un beneficio que no comente al principio sobre SVN, y son los comentarios de los cambios. Todos los cambios tienen la opción de enviarse con un comentario con una descripción de lo realizado. Esto es importante para controlar los diferentes cambios. Para agregar un comentario en un commit agregamos el parámetro "-m" y entre comillas el mensaje

Despues de ejecutar el commit el sistema nos tiene que mostrar por consola los detalles del commit, y nos devuelve la versión del repositorio actual ;)

Manteniendo actualizada la versión del sistema

Si necesitaramos actualizar el sistema solo tendríamos que hacer un update.

$ sudo svn up

Podríamos usar sudo svn update, pero para escribir menos podemos usar el alias up ;).

Si existen diferencias con nuestros archivos locales nos va a actualizar lo necesario.

Subiendo Archivos.

Para subir archivo solo tenemos que ejecutar la opción add.

$ svn add nombre_archivo_extendsion

Si el archivo no se encuentra en el repositorio lo va agregar, en caso contrario nos va a decir que el archivo ya se encuentra bajo control de versiones.

Podemos agregar una carpeta que contenga un grupo de archivos, y de carpeta, sin necesidad de agregar uno por uno.

Puede ser que consideren esto un poco cerrado ya que solo explico como trabajar desde linux, pero el problema es que con windows todo es supuestamente tan facil, que no deberías complicarles mucho esto. Tienen Tortoise que es una herramienta espectacular para trabajar desde windows ;), donde todas las acciones que hicimos en este mini tutorial lo tienen haciendo click derecho sobre la carpeta que tienen el proyecto.

Otro punto muy importante, es que la mayoria de los IDE decentes tienen soporte de control de versiones revisen la documentacion de su IDE para saber como configurarlo.

links relacionados: Configuracion, uso e instalacion de Subversion de Linux.

No hay comentarios: