6.3. Control de versiones

Mesa de control y mezclas.
Imagen en Flickr de Photographer con Algunos derechos reservados

Cuando se elabora un programa o cualquier producto de software en general, aunque se haya planificado bien con antelación, se haya diseñado convenientemente o se hayan elaborado borradores y diagramas de flujo, necesariamente en la evolución del producto se producen modificaciones, ediciones, revisiones, actualizaciones, cambios en su configuración, etc. Por otro lado cuando se elabora software industrial para proyectos grandes lo normal es que sean varios los desarrolladores de programación que intervengan en la ejecución de un programa. Esta colaboración necesaria entre ellos hace que sea indispensable contar con herramientas adecuadas para coordinar los trabajos pues el control manual no es suficiente.

Para gestionar todos estos cambios de forma adecuada existe lo que se denomina Sistema de Control de Versiones (VCS del inglés Version Control System). Es necesario disponer de un mecanismo de almacenamiento de elementos o archivos, fácil acceso a esos elementos para modificarlos, saber qué elementos se modificaron y cuáles no, registrar los usuarios que han realizado dichos cambios, en qué momento se realizaron, etc, es decir poseer un registro de esos cambios. En definitiva es necesario tener un historial que registre toda esta información, almacenado en algún lugar llamado Repositorio. También llamado depósito, suele estar en el disco duro de un servidor. Un VCS dispone de todo eso y además incluye funcionalidad para revertir la colección de archivos a otro estado. Otro estado puede significar a otra colección diferente de archivos o contenido diferente de los archivos. Por ejemplo podemos cambiar la colección de archivo por la que teníamos la semana anterior.

Es conveniente también tener la posibilidad, en un momento determinado, de abrir varias vías de trabajo de un mismo proyecto para luego decidir con cuál quedarse, o incluso poder mezclar las ideas y los cambios aplicados en todas o en varias de esas vías distintas. Es precisamente otra característica importante que aportan de estos sistemas.

Ya hemos dicho que un repositorio es básicamente un lugar de almacenamiento, un depósito de archivos que pueden ser de todo tipo (de imágenes, videos, animaciones, textos, etc). En el campo que nos atañe, el del desarrollo del software, en un repositorio se almacenan proyectos y programas, versiones de éstos y sus modificaciones en el tiempo, de forma que se tiene un histórico de esos programas o proyectos, pudiendo revertirlos a un estado anterior en el tiempo sin problemas. Normalmente suelen estar en el disco duro de un servidor que a través de internet está disponible.

Imaginemos que queremos hacer un programa. Empezamos grabando el primer archivo con un nombre, por ejemplo "proyecto". A medida que vamos modificando y aumentando sus líneas de código vamos grabando sobre el propio archivo, es decir "machacando" ese archivo con las últimas grabaciones, de tal forma que si queremos ver algo que hace varios días teníamos ya no es posible debido al número elevado de variaciones que hemos hecho. Llega un momento que decidimos grabar el archivo con otro nombre para conservar el actual en este preciso estado que tenemos y grabar lo próximo con otro nombre, por ejemplo "proyecto avanzado". En el segundo tenemos repetido todo el código del primero pero si en este segundo modificamos algo del contenido del primero ya no podríamos ver su estado anterior si nos faltara el primer archivo. Si repetimos varias veces el proceso tendremos por ejemplo los siguientes archivos: "proyecto", "proyecto avanzado", "proyecto avanzado mejorado", "proyecto V1", "proyecto V2", etc. Es una forma de tener un histórico del programa con las modificaciones y fechas de las mismas. Para hacer esto mismo pero de forma avanzada existen los programas de Sistemas de Control de Versiones (VCS). Este software hace todo eso de forma automática almacenando toda la información en los repositorios.

Un ejemplo de este tipo de sistemas es Git, que podrás estudiar en este mismo apartado.

Curiosidad

La mayoría de las veces, no nos damos cuenta que necesitamos un Sistema de Control de Versiones hasta que lo estamos utilizando. Es entonces cuando nos paramos a pensar cómo habíamos podido desarrollar las tareas hasta ese momento sin utilizarlo. Cuando termines el tema, tú también podrás valorar esta idea, y estarás en condiciones de plantearte el uso o no de un Sistema de Control de Versiones para tus trabajos y los de tus equipos.

Carpeta de Documentos.
Imagen en Pixabay de Open-Clipart Vectors bajo licencia CC0 Public Domain

Existen repositorios de varios tipos. Por un lado tenemos repositorios locales, es decir carpetas o directorios en el disco duro de nuestro propio ordenador, y por otro lado tenemos repositorios remotos en servidores, la web, en internet. Los repositorios remotos son versiones de tu proyecto grabados en algún sitio de Internet. Pueden ser de sólo lectura, o de lectura/escritura, según los permisos que tengas. Colaborar con otros implica gestionar estos repositorios remotos, y mandar (push) y recibir (pull) datos de ellos cuando necesites compartir cosas.

Tipos de Repositorios.
Fuente propia

Todo está sincronizado, de forma que si cae el sistema de algún usuario o de varios, o incluso del servidor central, con cualquier copia de otro usuario tendríamos el programa totalmente actualizado, ya que la información está muy replicada. En el repositorio nos aparecerían los archivos grabados relacionando fechas y horas, con lo que accediendo a cada uno de ellos tendríamos el estado del programa en ese momento determinado del tiempo, facilitando al programador información sobre qué modificó en cada instante y por qué.

Otra gran ventaja de sistemas VCS es que son básicos para trabajos colaborativos en el que múltiples programadores pueden trabajar simultáneamente sobre el mismo proyecto, en incluso en muchas ocasiones sobre los mismos archivos. El sistema se encarga de controlar que no haya problemas a la hora de sincronizar los trabajos. Así se garantiza, sea cual sea el momento en el que un programador acceda al proyecto para trabajar, que la copia de trabajo con la que arranca es la actual, la que contiene todo lo que los diferentes desarrolladores han incluido hasta ese instante.

.

Para comprender mejor la esencia fundamental del control de versiones y de los sistemas de control de versiones es conveniente primero conocer algunos de los términos que se suelen utilizar con más frecuencia. Así pues, ahora vamos a hacer un pequeño desglose de los más importantes, de esta manera, podrás entender con mayor claridad las ideas principales de esta poderosa herramienta. Son muchos conceptos nuevos, pero no te asustes, poco a poco los irás comprendiéndolos e irás familiarizándote con ellos de una forma muy sencilla.