1.1 ¿Qué es el control de versiones?

Entendiendo el problema que resuelve Git

Seguramente alguna vez has trabajado en un documento importante y terminaste con archivos llamados "documento_final", "documento_final_ahora_si", "documento_final_v3_revisado". Todos hemos estado ahí.

El problema de las copias manuales

Imagina esta situación: Carlos y Laura están colaborando en un proyecto de código. Carlos copia la carpeta del proyecto a su memoria USB, hace cambios en su casa, y al día siguiente intenta unir sus cambios con los que Laura hizo durante la tarde. El resultado es un desastre de archivos sobrescritos y código perdido.

Desarrolladores colaborando en un proyecto de código
Colaboración en un proyecto de código entre Carlos y Laura.

Este es exactamente el problema que el control de versiones viene a resolver. Un sistema de control de versiones es como una máquina del tiempo para tus archivos. Guarda el historial completo de cada cambio que se ha hecho, quién lo hizo y por qué.

El caos sin Git frente al orden lineal con Git

Sistemas centralizados vs distribuidos

Antes de Git, el mundo usaba sistemas centralizados como Subversion (SVN). En un sistema centralizado, hay un único servidor que contiene todos los archivos versionados, y varios clientes que descargan archivos de ese lugar central. El problema es evidente: si ese servidor se cae durante una hora, nadie puede colaborar ni guardar sus cambios. Y si el disco duro del servidor se corrompe, pierdes todo el historial del proyecto.

Git, creado en 2005 por Linus Torvalds, cambió las reglas del juego al ser distribuido. Esto significa que cuando descargas un repositorio con Git, no solo descargas la última versión de los archivos, sino que tu ordenador recibe una copia 100% idéntica e independiente de absolutamente todo el historial del proyecto. Si el servidor principal explota, cualquiera en el equipo tiene el proyecto completo para restaurarlo.

Instantáneas, no diferencias

Una diferencia técnica fundamental que debes comprender es cómo Git guarda tus datos. Mientras otros sistemas guardan la información como una lista de archivos y los cambios hechos a cada uno a lo largo del tiempo (deltas), Git piensa en sus datos como una serie de instantáneas de un sistema de archivos en miniatura.

Cada vez que guardas, Git toma una "foto" del aspecto de todos tus archivos en ese momento y guarda una referencia a esa instantánea. Para ser eficiente, si los archivos no han cambiado, Git no vuelve a guardar el archivo, sino un enlace al archivo anterior idéntico que ya tiene almacenado. Esto hace que Git sea increíblemente rápido, permitiendo ramificaciones casi instantáneas.

Representación de instantáneas en Git
Visualización de cómo Git guarda datos como instantáneas sucesivas.
Consejo práctico: No confundas Git con GitHub. Git es la herramienta de línea de comandos subyacente. GitHub, GitLab o Bitbucket son simplemente plataformas comerciales en la web donde puedes alojar tus repositorios de Git para facilitar la colaboración.

Puntos clave

  • Un control de versiones evita el caos de nombrar archivos manuales y permite la colaboración segura.
  • Git es distribuido: elimina los puntos únicos de fallo al dar a cada desarrollador una copia completa del historial.
  • Git guarda los datos como instantáneas sucesivas, lo que lo hace excepcionalmente rápido y eficiente.
  • Git es la tecnología subyacente; GitHub es el servicio de alojamiento web.
Inicia sesión e inscríbete para guardar tu progreso.