May 16th, 2008 Category: linux Programacion
3 Comments »

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.


Invitame una Cerverza


Comentar


3 Responses

GONZALO SUAREZ 2009-11-09 17:19:13
Cordial saludo,
El motivo del presente es consultar si ustedes manejan algún software para administración de repositorios y me pueden brindar información sobre el proceso que realizan para pasar a producción las nuevas versiones, el motivo de la consulta es por que en la empresa en la que trabajo utilizamos como herramienta para administrar los repositorios Subversion 1.5 pero solo como almacenamiento y control de las versiones y deseamos encontrar la forma de que el proceso de puesta en producción sea automático, Les agradezco cualquier información que me puedan brindar al respecto.

kari 2010-02-01 11:33:28
Hola!!!!!!! queisiera saberm si hay alguna forma de realizar correcciones de errores en las versiones de un arbol de proyecto de forma automatica........o en tal caso otra solucion podria ser de incluir lineas de correcion de errores entre las versiones en desarrollo porfa agradesco cualquier comontario................

gabrielcz 2010-10-25 18:44:58
GONZALO. Casualmente, he visto algunos mensajes tuyos consultando respecto a esto, te cuento, yo estoy haciendo un script para subir a produccion, pero NUNCA DE FORMA AUTOMATICA, creo que NADIE, o mejor dicho, TODOS te dirán que subir AUTOMATICAMENTE de un SVN a un servidor de producción no es recomendable, ya que sino, no se entiende para que sirve el servidor de desarrollo.
Yo te cuento que tengo a ver si te da algunas ideas...
1) tengo un servidor de SVN en Linux, lo que hice es configurar el fochero de POST-COMMIT, esto que es? es un script que se ejecuta despues de que cada uno hace un commit.

La idea, es que por ejemplo, hagas un post-commit en el MISMO servidor de SVN a por ejemplo /var/www/proyecto.com, luego configuras un sitio web apuntando a ese directorio, entonces cuando hagas un commit, podrás ver los cambios.
Lo que se puede hacer LUEGO, es configurar algo parecido en el servidor de produccion (hacer que sea cliente de subversion) ejecutas un svn update y tendrás los cambios, luego te recomiendo que BORRES los ficheros .SVN para no cargar con espacio inutil a tu servidor de produccion...

Yo me explico fatal, pero te paso un LINK para que entiendas lo que te digo y como hacerlo..

http://www.howtoforge.com/setting-up-subversion-with-webdav-post-commit-hook-and-multiple-sites-on-jaunty-jackalope-ubuntu-9.04

Pasa la parte de la creación del repositorio, instalacion del svn, etc... CENTRATE EN EL PUNTO: 6

Espero que te sirva, pero recuerda, yo JAMAS haría que la actualización de produccion sea AUTOMATICA, es un gravisimo error, pero ya sabes, es mi consejo, haz lo que quieras, dependerá del control que necesites en tu entorno :)

Saludos,