Sistema de control de versiones – ¿Qué es?

por el 11/09/17

Estoy preparando una serie de entradas sobre el uso del sistema de control de versiones GIT, tanto a nivel básico como avanzando, pero antes de eso, voy a describiros que es un sistema de control de versiones.

¿Qué es un sistema de control de versiones?

Es un sistema software que registra los cambios realizados sobre un conjunto de archivos a lo largo del tiempo, de modo que es posible navegar entre diferentes versiones y recuperar su contenido más adelante.

La gran parte de los sistemas de control de versiones permiten comparar contenido de ficheros, ver quién y cuándo se ha realizado un cambio y revertir a una versión concreta todo el proyecto o solo ciertos ficheros.

Aunque su uso más extendido es para ficheros de texto plano y especialmente en grupos de desarrollo, es posible usar los sistemas de control de versiones con cualquier tipo de fichero, ya sean imágenes, ejecutables binarios, vídeos, etc. En estos casos la comparativa de cambios entre ficheros se dificulta, ya que la comparación a nivel de bits no va a decir nada al común de los mortales.

Tipos de sistemas de control de versiones

Se pueden catalogar 3 grandes tipos de sistemas de control de versiones

Control de versiones local

Manual

Antes de la aparición de los sistemas de control de versiones, la única forma de historificar y guardar diferentes versiones para posterior consulta, era crear copias manuales de los proyectos, generalmente con la fecha del cambio como nombre de la carpeta junto a algún comentario.

Este método es muy propenso a errores, ya que es fácil no darse cuenta en que directorio estás trabajando y modificar un fichero de una versión anterior, perdiendo su contenido.

Software

Para solventar los problemas de base del sistema manual, se desarrollaron los primeros sistemas de control de versiones, lo cuales se trataban de una simple base de datos que contenía un registro de todos los cambios realizados.

Las principales desventajas de este planteamiento son que no permiten colaboración entre usuarios, y que ante un fallo o perdida de la base de datos de versiones, se pierde todo el histórico, siendo solo recuperable si se disponía de alguna copia de seguridad externa.

Ejemplos: RCS (Revision Control Sytem)

Control de versiones centralizado

Para permitir la colaboración de diferentes personas en un proyecto, se crearon los sistemas de control de versiones centralizados. En estos sitemas el repositorio con los cambios se encuentra en un único servidor, del cual cada uno de los colaboradores del proyecto obtiene y envía los cambios.

Esta ventaja no es únicamente para los colaboradores, pues los administradores pueden controlar de forma detallada lo que realiza cada uno de los miembros.

El inconveniente que presenta este tipo de control de versiones es que en caso de fallo del servidor central se pierde toda la evolución del proyecto. Esto se puede solventar fácilmente con un sistema de backups. (Igual que en los sistemas locales).

También, durante una indisponibilidad del servidor, los miembros no serán capaces de revisar cambios anteriores ni versionar los actuales hasta que este vuelva a estar disponible.

Ejemplos: CVS (Concurrent Versioning System), SVN (Subversion)

Control de versiones distribuido

La última vuelta de tuerca a los sistemas de control de versiones, donde se mezclan los dos sistemas previos.

Cuando se descarga el contenido de un repositorio con un sistema de control de versiones distribuido, no solo se descarga la instantánea seleccionada, si no que se replica completamente el repositorio. Cada vez que se actualiza el contenido local, se replican todos los cambios del servidor.

Gracias a este planteamiento, si el sistema del servidor resultase corrupto, podría usarse cualquiera de las replicas de los usuarios para volver a disponer del servidor con su historia completa. Igualmente, ante una indisponibilidad temporal del repositorio central, los colaboradores podrían seguir versionando cambios hasta que este volviese a estar disponible, momento en el que podrían enviar el conjunto de versiones.

Ejemplos: GIT, Mercurial

Comparativa

A modo resumen, os dejo una tabla comparativa con las principales caractéristicas de cada uno de los sitemas comentados

Local Centralizado Distribuido
Colaboración/Trabajo en equipo
Revisión por administrador
Permite trabajar ante fallos del servidor
Servidor recuperable en caso de error


Espero que esta introducción os haya resultado de utilidad. Cualquier comentario, como siempre, será más que bievenido, al igual que cualquier posible duda que pueda surgiros.

¡Nos vemos en los comentarios comiendo Pistachitos!


Basado en: https://git-scm.com/book

Escribir un Comentario