Un control de versiones, de acuerdo con la definición de la Wikipedia, se le llama a la gestión de los cambios que se llevan a cabo en los elementos de un producto. Generalmente suele estar asociado al mundo del desarrollo de software, aunque no es el único campo en el que puede resultar útil. Veremos que puede tener más aplicaciones.

Generalmente se utiliza un software específico diseñado para tal propósito, conocido como VCS (Version Control System) por sus siglas en inglés. Existen numerosas herramientas para este fin. Aunque no sea objeto de este post, podríamos citar como ejemplo a Git, por ser quizá una de las más famosas, aunque no es ni de lejos la única.

¿Cómo funciona un sistema de control de versiones?

A grandes rasgos, y dando una definición bastante de andar por casa, podríamos decir que este tipo de sistemas documentan todos los cambios que se llevan a cabo en los diferentes archivos que componen un elemento, sean archivos de texto, imágenes, u otros documentos.

Cada uno de estos cambios da lugar a lo que se conoce como un commit, que no es más que una instantánea del proceso que el usuario guarda. Estos commits tienen un identificador único y ofrecen la posibilidad de incluir comentarios y anotaciones. También se pueden ver los cambios realizados en el código o los archivos que fueron modificados.

Los archivos del proyecto son almacenados en lo que se conoce como un repositorio, que no es más que un alojamiento en un servidor remoto o un disco duro local donde se guardan. Lo bueno de este sistema es que muchos pueden trabajar a la vez sobre el mismo repositorio sin interferir unos sobre las acciones de otros.

 

¿Por que es bueno utilizar un control de versiones?

Si imaginamos un proyecto en el que varios programadores modifican código a la vez, resulta fácil adivinar que en algún momento alguien va a editar sobre el trabajo de otro. Es por esto que el sistema de control nos ofrece una serie de mecanismos útiles para evitar este tipo de colisiones. 

Además de prevenir desastres, ya que generalmente dispondremos de una versión anterior, puede ayudar a implementar nuevas funcionalidades y características fácilmente. Esto se puede conseguir mediante el uso de las llamadas branches, entre otros mecanismos, que facilitan el desarrollo de nuevas características y su implantación en el proyecto. Si la cosa se decide implantar finalmente se puede integrar al desarrollo original en un par de clicks.

Por otra parte, otros programadores pueden proponer al responsable del proyecto sus propios cambios, y éste puede decidir si serán integrados o si no, por lo general después de ser revisados. Si finalmente se deciden añadir, es tan sencillo como actualizar el proyecto principal o publicar una nueva versión.

 

Una herramienta útil

Como vemos, este tipo de aplicaciones favorecen el trabajo colaborativo, a la vez que simplifica mucho las tareas de gestión, sobre todo cuando se trata de un equipo más o menos numeroso. No era la intención del post profundizar en el uso de estos sistemas, sino aproximarnos un poco a la idea general. En cualquier caso haría falta bastante más de un post y de dos para aprender a utilizarlo de manera exhaustiva.

El uso de estas herramientas puede ahorrarnos muchos quebraderos de cabeza y ayudarnos  a detectar errores que de otro modo se perderían en la inmensidad del código. A la hora de revisarlo, resulta muy cómodo saber qué linea en concreto fue modificada o qué había en ese archivo antes del gran desastre.