Sistemas de control de versiones

Cuando se plantea la implantación de mecanismos de gestión de configuración, existen múltiples alternativas que deben ser estudiadas según las necesidades de cada caso.

La primera alternativa, aunque la más desaconsejable, es la gestión manual. En este caso, la línea base es la última versión del producto. Para modificar dicha versión es necesario formular una petición de cambio cumplimentando el formulario definido. Esta petición de cambio es evaluada por un comité para determinar la idoneidad de su implantación y, si es aceptada, se implementa generando una nueva versión. Evidentemente, para evitar que se pierda la versión anterior, es necesario almacenar una copia y es donde surgen los ficheros con nombres según la versión, fechas, ficheros comprimidos con versiones…

Esta alternativa tiene algunos aspectos bastante negativos: su gran sobrecarga, la facilidad con la que el sistema se rompe con lo que es invalidado y la lentitud que supone la burocracia en el proceso de cambio. Su único punto favorable es que es 100% adaptable a las necesidades.

Evidentemente, esta alternativa no es muy viable en la práctica (como sufrí durante ingeniería del software durante la carrera). Sin embargo, existen herramientas que se encargan de automatizar prácticamente todas las tareas: los sistemas de control de versiones.

Los sistemas de control de versiones son programas que se encargan de controlar y gestionar los distintos cambios que se producen en el producto. Este producto puede ser desde el código de un programa, un libro, planos…

Todos los sistemas de control de versiones se basan en el concepto repositorio. Un repositorio no es más que el conjunto de versiones del producto. Una vez creado, los distintos usuarios realizan sus cambios sobre el repositorio que se encarga de almacenarlos permitiendo la recuperación de cualquier versión. Existen dos tipos de repositorios:

Centralizado:
El repositorio es único y reside en una máquina accesible por cualquier usuario. Este es el modelo más usual.
Distribuido:
En este caso, existen múltiples repositorios accesibles por cada usuario. Cada usuario utiliza un repositorio cualquiera y existen mecanismos de sincronización entre repositorios.

En cualquiera de los dos casos, el repositorio es compartido por todos los usuarios (o al mismo usuario desde distintas máquinas) que tengan acceso al mismo. Es posible que se produzcan ediciones simultáneas de los mismos elementos que generen conflictos. Para solucionar este problema existen dos políticas básicas de resolución de conflictos:

bloqueo-modificación-desbloqueo:
En esta política se evitan las modificaciones concurrentes. Cuando un usuario desea realizar una modificación, indica el elemento a modificar que queda bloqueado en el repositorio por lo que se impide el acceso al resto de usuarios (exlusión mutua). Cuando finaliza de realizar sus cambios, los envía al repositorio liberando el bloqueo con lo que el resto de los usuarios puede obtener la copia actualizada para realizar sus propios cambios.
copiar-modificar-mezclar:
Esta política permite las modificaciones simultáneas. Cada usuario hace una copia del repositorio en su máquina y procede trabajar con ella como si no fuera un repositorio. Cuando finaliza su trabajo, envía los cambios al repositorio que se encarga de analizar los cambios realizados por el usuario y los que se han realizado en el propio repositorio y realiza la mezcla.

Evidentemente, la primera política es mucho más restrictiva lo que dificulta el trabajo diario ralentizando el acceso a los recursos y ocasionando problemas si no se liberan recursos bloqueados. La segunda, por su parte, tiene como inconveniente que no siempre es posible mezclar los cambios realizados aunque en esos casos, utiliza al usuario que envía cambios para solucionar esos conflictos irresolubles automáticamente.

Existen numerosas aplicaciones para controlar versiones: CVS, darcs, Sourcesafe, Subversion… cada una con sus características únicas. A partir de la próxima entrega se analizará una de ellas.

Este artículo pertenece a la serie
Control de versiones
[ Publicado originalmente el 23 de agosto de 2007 ]