Una de las principales preocupaciones de un equipo de desarrollo de software es controlar los cambios que se realizan en el código fuente de una solución. Es muy frecuente que dicho control se realice creando copias de seguridad del proyecto a medida que se progresa en el desarrollo. Sin embargo, existen diversas estrategias que permiten realizar esta tarea de forma más efectiva, rápida y menos sujeta a errores: los sistemas de control de versiones.
Un sistema de control de versiones (Control Version System, CVS) detecta automáticamente los cambios que se realizan en los ficheros de la solución y guarda su estado en una base de datos. Así el programador es capaz de definir “fotografías del proyecto”, las cuales puede recuperar en el futuro de ser necesario.
Trabajando en equipo
Además de almacenar el código fuente, los CVS permiten que diversas personas trabajen en el mismo proyecto, e incluso en los mismos ficheros. Hoy en día, los proyectos de software, especialmente si son relativamente grandes, dependen de la colaboración de varios miembros de un mismo equipo de desarrollo.
La mayoría de los CVS incluyen herramientas para gestionar los conflictos que se producen al manipular concurrentemente los mismos archivos. Es por ello que el control de versiones se hace imprescindible al trabajar en equipo.
El top 3
Sobre todos los sistemas de control de versiones, tres de ellos destacan por su popularidad, su estabilidad y su facilidad de uso.
GIT es en la actualidad el favorito indiscutible entre los sistemas de control de versiones. Su arquitectura es distribuida, lo cual significa que cada cliente (la estación de trabajado de cada desarrollador) trabaja con una copia completa del repositorio y no con una versión específica del código. Esto ofrece diversas ventajas sobre las arquitecturas centralizadas; entre ellas, seguridad frente a pérdidas o agilidad al crear ramas de desarrollo.
Al ser el CVS más popular, existen múltiples portales que ofrecen hosting de proyectos GIT incluso de forma gratuita, tales como GitHub, Bitbucket o Visual Studio Online. Al ser servicios en la nube, permiten que los desarrolladores trabajen de forma distribuida desde cualquier parte del mundo. De hecho, es una práctica muy común que diversos colaboradores externos a un proyecto (que no pertenecen al equipo de desarrollo principal de éste) aporten sus desarrollos a la solución, como es natural, previa aprobación de un miembro del equipo.
La gestión de las ramas y de las releases de la solución puede hacerse a través de un completo conjunto de comandos que incluye GIT. Sin embargo, es muy habitual utilizar herramientas externas como GitExtensions o SourceTree para realizar este tipo de tareas de forma visual, evitando así memorizar los comandos.
Team Foundation Version Control (TFVC) es una solución de control de versiones comúnmente utilizada para proyectos de .NET (Microsoft). A diferencia de GIT, su arquitectura es centralizada, lo cual implica que el repositorio se guarda en un servidor central (Team Foundation Server) y el desarrollador trabaja únicamente con una versión del código.
Su principal potencia reside en la sinergia con el resto de productos desarrollo de Microsoft: combinando TFVC con Visual Studio se consigue un entorno de trabajo completamente integrado y estable, sin necesidad de productos externos.
Subversion (comúnmente abreviado con SVN) es uno de los CVS más antiguos -su lanzamiento fue en octubre del 2000- aunque hoy en día sigue siendo el preferido de muchos desarrolladores.
De nuevo, se trata de un sistema de control de versiones centralizado (al igual que TFVC) y su código es libre. Al ser tan antiguo, existen numerosas herramientas muy consolidadas que trabajan con SVN, como TortoiseSVN, Subclipse o RapidSVN.
Sin embargo, presenta ciertas carencias importantes con respecto a los CVS anteriormente mencionados. Entre las más relevantes, la dificultad a la hora de gestionar los conflictos entre diferentes ramas y sus problemas de rendimiento. Es por ello que la tendencia actual, especialmente en proyectos nuevos, es migrar a GIT.
Conclusión
Como es habitual, la decisión de qué sistema de control de versiones seleccionar depende del equipo de desarrollo y de la experiencia de la que se disponga. En Ulbe Group preferimos utilizar GIT combinado con el conjunto de herramientas que provee Atalassian (entre ellas, Bitbutcket y SourceTree) por su soporte y estabilidad.
De cualquier modo y sea cual sea la elección del CVS, a fin de garantizar un ciclo de vida del software adecuado, es importante seguir un conjunto de buenas prácticas, al igual que un branching management adecuado, aunque esto es materia de otro post.