A la hora de hacer copias de seguridad de nuestros documentos deberíamos establecer ciertos criterios y medidas que nos ayuden a preservar un control sobre qué guardamos, qué teníamos ya guardado y qué podremos guardar más adelante (con vistas a prevenir falta de espacio o archivos redundantes). Yo personalmente soy de los que tienen un par de copias en discos físicos y un par de carpetas en la nube “por si acaso”.

Esto puede que roce lo paranoico, pero no me gustaría perder datos relevantes o información ya imposible de encontrar hoy día por un disco duro que falle o un servicio de alojamiento que cierre de forma inesperada (gracias Megaupload ¬.¬).

Y si evitar duplicados entre unos cuantos archivos y carpetas es así con simples documentos, imágenes u otros ficheros, imaginaros cómo será llevar el control de cientos , miles o millones de líneas de código.

Cada cambio, cada corrección o fallo detectado debería ser anotado para facilitarnos el que al corregir cierto error conocido se genere algún otro, y por resto resultan muy interesantes los distintos software de control de versiones que existen hoy día.

Gracias a Internet donde podemos encontrar cursos como los de este enlace , cualquiera puede desarrollar una aplicación web o móvil; que seguramente contendrá errores una vez se empiece a distribuir o bien se le quieran ir añadiendo nuevas funcionalidades. El software de control de versiones nos facilita esto registrando una copia de cada versión que finalicemos.

Pero no sólo para los desarrolladores individuales el control de versiones tiene su utilidad. Si nos encontramos en un equipo de trabajo en el que las partes de cada integrante están bien diferenciadas, conocer qué cambios ha hecho cada cual es fundamental, tanto por los tiempos de espera que podríamos reducir al no saber si otro grupo ha terminado su parte como por comprobar qué funciones se han ido añadiendo en cada revisión.

Este registro también nos servirá de histórico, porque el hecho de que un proyecto se divida en varias personas, supone que estas estarán añadiendo, salvando, editando, etc… en varias partes de la aplicación. Con el control de versiones podremos identificar quién ha escrito qué, dónde y cuándo.

¿Cómo funciona?

Es la principal pregunta que, aunque se podría sacar de la redacción hasta este punto, vamos a especificar un poco más.

Primero deberemos implementar un servicio de control de versiones o suscribirnos a un hosting que lo ofrezca (más adelante veremos algunos) y en ellos especificaremos qué directorios de nuestro proyecto deberán ser seguidos por el control de versiones (puede que no queramos rastrear todos los directorios por la inamovilidad de algún dato en concreto).

Una vez hecho esto, deberemos designar a los colaboradores que tendrán acceso al proyecto (deberán crearse una cuenta por lo general) y estableceremos los permisos que queramos otorgarles.

Con estos parámetros configurados, los cambios se registrarán automáticamente, pero éstos lo harán como una ‘colección’ de acciones llamada revisión; asegurándonos así de acceder siempre a la versión más reciente de nuestro proyecto.

Si quisiéramos comparar dos revisiones (debido a que ha aparecido algún error, por ejemplo) el servicio de control de versiones nos ofrecerá una comparativa resaltándonos los datos o apartados modificados, código añadido, etc… de una a otra así como su autor, fecha, hora…

Vale, ya tenemos nuestro proyecto establecido y podemos controlar sus diferentes versiones, accesos y demás. Pero ahora queremos implementar un cambio drástico (probar una nueva interfaz que no sabemos si se integrará bien con nuestros componentes…) y no queremos que se cree la revisión de inmediato.

En estos casos podemos generar ramificaciones del proyecto principal (denominadas ‘branchs’), que no son más que una copia temporal en la que trabajaremos en paralelo al proyecto para implementar o probar estos cambios. Si las pruebas son satisfactorias podremos integrar esta rama de nuevo al hilo principal, sin embargo, en caso resultar en catástrofe, podremos descartar los cambios sin asentar ninguna nueva revisión al hilo principal.

Dependiendo de la configuración que hayamos establecidos, los sistemas de control de versiones suelen tener cierta “inteligencia” para reconocer qué cambios deben asentarse como revisiones, no obstante en caso de no quererlo así o en caso que el sistema sea incapaz de decidir qué cambios incluir en cada revisión, deberemos solventar el conflicto manualmente.

Podríamos ilustrar todo esto de las ramas con la siguiente imagen:

Imagen 0 en Git: Qué es y cómo funciona

Un poco de Historia

Los sistemas de control de versiones no son recientes en absoluto, de hecho ya han pasado por varias generaciones:

  • Primera Generación: Varias personas podían trabajar en el mismo archivo, pero no simultáneamente ya que el archivo se bloqueaba para evitar estas múltiples conexiones a la vez.

  • Segunda Generación: Muchos de los sistemas de control de versiones que nos ofrecen distintos hostings hoy día se encuentran en esta categoría. A diferencia de la primera generación, varios usuarios pueden conectarse y trabajar de forma simultánea en un mismo archivo, pero los cambios deberán combinarse en la revisión actual antes de poder cerrarla para compararla con previas o posteriores.

o CVS (Concurrent Version System) es uno de los controladores de versiones de esta generación. Permite interacciones cliente/servidor.

 

o SVN (o Apache Subversion in full) se podría entender como un rediseño de CVS que pone fin a algunas de las limitaciones establecidas.

  • Tercera Generación: Destaca el DVCS (Distributed Version Control System) y su posibilidad de separar y combinar operaciones de confirmación para generar las diferentes revisiones, o el que diferentes ramas de un proyecto contengan a su vez diferentes partes. Git es uno de sus ejemplos más reconocidos.

 

Esto es sólo una pincelada de lo que podréis encontrar en el curso de Git, Github y Gitlab que encontraréis en Openwebinars , donde aprenderemos a implementar y trabajar con estas herramientas para acabar reconociendo que el control de versiones es uno de los recursos más importantes con el que puede contar un desarrollador. Recordad suscribiros y seguirnos por las redes sociales. Un saludo!