Una herramienta diseñada para gestionar los cambios en el código fuente o cualquier conjunto de archivos a lo largo del tiempo.
Descripción
Se trata de un sistema que registra los cambios realizados en los archivos a lo largo del tiempo, de modo que podamos recuperar versiones específicas más adelante. Aunque el concepto es más frecuente en el campo de la informática y el desarrollo web, en realidad puede aplicarse a muchos ámbitos diferentes.
El control de versiones se suele realizar con herramientas VCS, como por ejemplo Git.
Imaginemos que estamos escribiendo un libro o una tesis. Sin control de versiones, probablemente tendríamos archivos llamados capitulo1.docx, capitulo1_final.docx y capitulo1_final_ESTE_SI.docx. Con un sistema de control de versiones tendremos únicamente un archivo, pero podremos ver exactamente qué frase borramos el martes pasado a las 3:00 PM.
Conceptos fundamentales
Repositorio (repo)
Es el lugar donde se guardan todos los archivos y el historial completo de sus cambios.
Confirmación (commit)
Es una especie de «foto» de nuestros archivos en un momento determinado. Cada vez que hacemos un commit, guardamos el estado actual de nuestro trabajo con un mensaje descriptivo.
Rama (branch)
Permite desviarse de la línea principal de trabajo para probar una idea o arreglar un error sin afectar la versión «estable».
Fusión (merge)
Es el proceso de unir los cambios de una rama de vuelta a la principal.
Tipos
Sistemas locales
Una base de datos simple en nuestro propio ordenador.
Ejemplo: Copias de seguridad manuales.
Sistemas centralizados
Un solo servidor contiene todos los archivos y los usuarios «toman prestada» una versión.
Ejemplo: Subversion (SVN).
Sistemas distribuidos
Cada usuario tiene una copia completa del historial en su equipo. Es el estándar actual.
Ejemplo: Git, Mercurial.