Un control de versiones es un sistema que permite registrar versiones anteriores de un archivo o sistema de archivos. Como lo puede ser código o incluso imágenes.
Es una herramienta muy útil que nos puede servir para revertir errores que se hayan cometido, comparar los cambios a lo largo del tiempo, entre otras cosas.
Un control de versiones local usado por muchas personas consiste en guardar una copia de los archivos en otro directorio, quizá nombrándolo con la fecha del registro.
Este método es propenso a errores pues se podría guardar por equivocación en un directorio incorrectoy así perder el registro que se llevaba.
Para afrontar este problema los programadores desarrollaron sistemas de control de versiones de locales que funcionaban con una simple base de datos, en la que se registraban los cambios realizados a los archivos.
Un sistema de este estilo llamado RCS se hizo muy popular, e incluso se puede encontrar todavía en muchas computadoras actuales. Incluso MAC OS X incluye el comando rcs cuando instalas herrmientas de desarrollo. Esta herramienta funciona guardando conjuntos de parches, es decir, las diferencias entre los archivos, para con ellos poder recrear cualquier versión de los mismos.
Cuando se trata de trabajar con otros desarrolladores en sistemas diferentes se utiliza un sistema de control de versiones anteriores, el cual es un servidor que contiene todos los archivos versionados, y los clientes descargan los archivos desde ese lugar central. Este ha sido el estándar en cuando a sistemas de control de versiones centralizados por muchos años.
Esta forma de trabajar presenta ventajas a la hora de trabajar en equipo, pues cada parte puede tener una idea de en qué se está trabajando dentro del proyecto, los administradores tienen control sobre qué puede hacer cada usuario, y es mucho más fácil que tener que lidiar con una base de datos local para cada persona.
Sin embargo, este sistema también presenta sus problemas. Como podría ser el caso en el que el servidor se caiga, nadie podría actualizar sus versiones en el tiempo en el que el servidor esté caído, y se tendría que trabajar solamente con su copia local. También está la posibilidad de que los archivos se corrompan y se pueda perder la información en caso de que no se haya hecho un respaldo de manera adecuada.
Los sistemas de control de versiones distribuidos ofrecen solución a los problemas mencionados. En lugar de descargar una copia de la versión, se replica completamente el repositorio. De esta manera, si el servidor dejara de funcionar y se estaba colaborando a trabés de él, cualquiera de los repositorios disponibles en los clientes puede ser copiado al servidor para restaurarlo.
Además, muchos de estos sistemas se encargan de manejar numerosos repositorios remotos con los cuales trabajar, por lo cual se puede trabajar de manera simultanea con diferentes grupos de personas en dististas maneras dentro del mismo proyecto. Permitiendo varios flujos de trabajo que no serían posibles con sistemas de control de versiones centralizados, como lo podría ser de manera jerárquica.
El control de versiones es una herramienta que resulta muy útil para mantener la integridad de nuestros proyectos en caso de que ocurra algún fallo o al momento de trabajar en equipo, es algo que se ha extendido tanto, y se encuentra en tantas áreas, que lo hemos normalizado al punto en que se considera primordial a la hora de trabajar en cualquier proyecto.
Y no es para menos, pues el contar con versiones guardadas del proyecto nos permite realizar un seguimiento de los cambios que han ido surgiendo en el mismo, así como permitirnos mayor libertad a la hora de llevar a cabo experimentación y pruebas.