jueves, marzo 29, 2007

Subversion: Colaboración en el Software

En este artículo vamos a ver el funcionamiento de Subversion, una herramienta libre que sirve como repositorio de código en los proyectos de desarollo software. La utilización de un repositorio de código, un sitio central donde se vayan juntando todas las partes desarrolladas por las diferentes personas involucradas, es obligado. Sin embargo, Subversion nos ofrece una serie de funcionalidades que la convierten en una de las herramientas colaborativas más utilizadas.

¿Qué es un repositorio?
Un repositorio de código es, en esencia, un programa que sirve para juntar las partes de código que los desarrolladores programan por separado. Las funcionalidades básicas (aunque no todos las cumplen) son las siguientes:
  • Mantener revisiones de código, es decir, si yo cambio algo en el repositorio, el gestor de código debe mantener puntos de restauración, de forma que cualquiera pueda descargarse el código con mis modificaciones o sin ellas.
  • Seguimiento de Cambios, debo poder realizar comentarios cuando actualice algo, indicando qué es lo que he cambiado, qué es lo que he arreglado, etc. de forma que el resto de desarrolladores puedan consultar mi comentario y saber qué es lo que he hecho antes de descargarselo.
  • Copias de seguridad de los códigos y las revisiones.
  • Etiquetas de versiones y revisiones, para poder localizar rápidamente la versión a descargar o la revisión específica.
¿Por qué utilizar un repositorio de código?
Cuando nos encontramos involucrados dentro de proyectos de desarrollo donde trabajan diversas personas cada una de ellas conocerá una parte del desarrollo y se centrará en ella. Sin embargo, aunque cada uno lleve su parte, necesita la de los demás para que funcione correctamente. Sin un repositorio, tendríamos que enviarnos constantemente todas las partes unos a otros con el consiguiente caos, o que una persona se dedicase a recibir todas las modificaciones y mandarlas al resto de desarrolladores. En el siguiente diagrama se muestra un poco esta situación:











En el caso que tengamos un repositorio de código, la situación sería diferente. Cada desarrollador estaría conectado con el repositorio y enviaría sus modificaciones al mismo. Este se encargaría de conjugar las diferentes partes y mostrar a los desarrolladores la versión completa.

Operaciones con los repositorios:
Existen dos operaciones básicas que se realizan en todos los respositorios y luego algunas funcionalidades avanzadas de algunos mejor preparados, caso de Subversion.

  • Confirmar: subir los cambios que hemos realizado al repositorio. Únicamente se enviarán los cambios realizados con respecto a la versión existente en el repositorio.
  • Actualizar: recibir la versión existente en el repositorio con los cambios que hayan realizado el resto de desarrolladores.












Las operaciones especiales que tenemos en los repositorios y que le dan un valor añadido son:

  • Creación de etiquetas y versiones: nos permite marcar con una etiqueta una confirmación de cambios o crear una versión, de forma que se pueden localizar rápidamente las revisiones o versiones.
  • Creación de ramas de desarrollo: esta opción permite crear líneas independiente de desarrollo. Esto se utiliza para el desarrollo de partes de las aplicaciones que no queremos que interfieran en la rama principal hasta que estén acabadas. Una vez terminadas, se fusiona la rama de desarrollo con la principal.
  • Bloqueo de ficheros: habrá veces que estemos modificando un fichero y no queramos que nadie lo toque mientras lo tengamos nosotros. En ese caso, bloquearemos el fichero y el repositorio no dejará que nadie lo utilice.
  • Fusión de ficheros: esta es una de las herramientas más potentes de Subversion ya que permite que varias personas trabajen simultáneamente sobre el mismo fichero, encargándose él de fusionar los cambios. En caso de surgir un conflicto porque varias personas han modificado la misma parte del fichero, tendrá que ser el usuario el que diga cual es la modificación que prevalece.











Utilización del repositorio:
Como en todas las fases de un proyecto, es necesario plantearse una estrategia para la utilización del repositorio. Subversion se basa en carpetas dentro de las cuales se organiza la información. Para acceder al repositorio se puede hacer vía un servidor Apache (utilizando http) o mediante el servidor subversion (protocolo svn). Dentro del servidor accederemos a una carpeta o subcarpeta para actualizar nuestra información. Se aconseja siempre que los ficheros que se mantengan controlados por el repositorio sean los de código fuente, excluyendo ficheros binarios, compilados, librerías, etc. La estructura de carpetas aconsejable es la siguiente:

  • Carpeta TRUNK: rama principal de desarrollo, aquí irá el desarrollo principal y se irán fusionando las diferentes ramas.
  • Carpeta TAGS: carpeta donde se almacenarán las diferentes versiones y revisiones con nombre del desarrollo. Cuando queramos descargarnos una versión la buscaremos en esta carpeta
  • Carpeta BRANCHES: carpeta donde se almacenan las ramas de desarrollo de nuestro sistema.
Manteniendo esta simple jerarquía de carpetas será mucho más fácil gestionar nuestro repositorio de código y realizar las copias de seguridad.

Conclusión:
La utilización de un repositorio de código es obligado en proyectos que cuenten con más de dos o tres personas trabajando. No solo nos sirven como controlador de los cambios, sino también como copia de respaldo del código. Es muy aconsejable utilizarlos y sacarles el máximo de provecho.

No hay comentarios: