lunes, 22 de marzo de 2010

Sistemas de control de versiones

La principal clasificación que se puede establecer está basada en el almacenamiento del código:

* Centralizados: existe un repositorio centralizado de todo el código, del cual es responsable un único usuario (o conjunto de ellos). Se facilitan las tareas administrativas a cambio de reducir flexibilidad, pues todas las decisiones fuertes (como crear una nueva rama) necesitan la aprobación del responsable. Algunos ejemplos son CVS, Subversion.
* Distribuidos: cada usuario tiene su propio repositorio. No es necesario tomar decisiones centralizadamente. Los distintos repositorios pueden intercambiar y mezclar revisiones entre ellos. Ejemplos: Git, Mercurial.


Aquí se presentan amplias tablas comparativas de los distintos sistemas de control de versiones que existen en la actualidad. Sin embargo, voy a centrarme en comparar dos sistemas de uso extendido y muy diferentes entre sí: Subversion (SVN) y GIT.

Toda la documentación que he leído coincide en que GIT es un innovador diseño de sistema de control de versiones pensado para ganar eficiencia y confiabilidad en el mantenimiento de versiones de aplicaciones cuando estas tienen un gran número archivos de código fuente. Este sistema resulta de la experiencia del diseñador de Linux, Linus Torvalds.
La principal diferencia ya la he mencionado en la introducción y es que SVN es un sistema centralizado mientras que GIT es distribuido. Esto significa que GIT le da a cada programador una copia local del historial del desarrollo entero y los cambios se propagan entre los repositorios locales. Los cambios externos se importan como ramificaciones adicionales y pueden ser fusionados en la misma manera que se hace con la ramificación local. De este modo realiza una gestión eficiente de proyectos grandes, dada la rapidez de gestión de diferencias entre archivos, entre otras mejoras de optimización de velocidad de ejecución.
Una desventaja de GIT frente a SVN es que resulta algo más caro trabajar con ficheros concretos frente a proyectos, ya que SVN trabaja con base en cambios de fichero. Otra desventaja importante de GIT es que no puede ejecutarse de modo nativo en Windows, reduciendo quizá así su número de usuarios.

Para concluir, a pesar de alguna desventaja los sistemas distribuidos y en concreto GIT están desbancando a los sistemas centralizados tradicionales. Las principales ventajas son:

1. Se trabaja con el repositorio completo de forma local.
2. Flexibilidad total para trabajar con distintas ramas y fusionarlas.
3. Velocidad de actualizaciones: el tiempo de actualizar un repositorio remoto es superior al tiempo que tarda SVN.


En cuanto a mi experiencia, únicamente he trabajado con subversion tanto de manera personal para gestionar mis prácticas y PFCs de la universidad así como desarrolladora de un proyecto de software libre (Jderobot) de unas 200.000 líneas de código y ahora mismo con dos ramas de desarrollo. Mi impresión en general es que de gran utilidad un sistema de control de versiones incluso para proyectos de pequeña escala. Sin embargo, sí me he encontrado con ciertas limitaciones utilizando subversion para Jderobot al ser varios desarrolladores los que introducimos cambios. La primera es que, antes de modificar nada, explícitamente hay que actualizar tu copia de trabajo por si alguien hubiera añadido cambios al repositorio. La segunda y principal es que si la versión más reciente por algún motivo no funciona correctamente, te obliga a trabajar con la copia anterior no actualizada (si es que la has guardado) y esperar que tus cambios no entren en conflicto con los nuevos cambios.
Por lo que he leído GIT resuelve este tipo de conflictos, pero aún no he tenido la oportunidad de trabajar con este nuevo sistema. Supongo que en un futuro no muy lejano migraremos al nuevo sistema distribuido.

Aquí dejo las fuentes en las que me he basado y algunos enlaces interesantes que he encontrado sobre este tema.

http://en.wikipedia.org/wiki/Source_Control_Management
http://entrevistas.barrapunto.com/article.pl?sid=07/06/02/147209&threshold=-1
http://markmcb.com/2008/10/18/3-reasons-to-switch-to-git-from-subversion/
http://versioncontrolblog.com/comparison/Git/Subversion/index.html
http://slnc.me/hola-git-sayonara-subversion/

No hay comentarios:

Publicar un comentario