¿Qué tienen en común Git y Mercadona?

Fernando Costa
4 min readApr 7, 2022

--

La respuesta no te sorprenderá.

Nada. No tienen nada que ver. Pero si estiramos un poco el chicle, podemos hacer un símil entre los dos. Y es que Git es un sistema de control de versiones (VSC) y hacer la compra es un proceso que sigue la misma metodología.

Ponte que tienes un cumpleaños el fin de semana. Te toca llevar algo y, en vez de arriesgar tu inexistente fama de foodie, decides bajar a por hummus, unas patatas con sabor a huevo frito, una de Larios, unos torreznos y unos plátanos (porque el realfood).

Una vez con todos los artículos en la cesta, te diriges hacia la caja, donde dos señoras previamente se han colado de forma dolorosamente obvia e impune. Colocas los artículos en la cinta y el cajero empieza a escanearlos.

El chico (al que llamaremos Git) escanea los artículos a una velocidad que ya quisieras tú que alcanzara tu coche. Pero al fin y al cabo, desde que pones las cosas en la cinta hasta que te llevas las bolsas, es su área de trabajo. O dicho en términos de git, el working directory.

Cada vez que se escanea algo, se está registrando la información en tu ticket. Lo que está haciendo cada vez que pasa el código de barras por el lector es hacer un

git add patatas_huevo_frito

de tal forma que queda registrado dentro de la caja.

Una vez ha acabado de escanear todo y no te ha dado tiempo a embolsar, es hora de pagar. Entonces el cajero te advierte que en un despiste tonto, sin intención alguna, has pesado los plátanos como bananas y te los ibas a llevar por la mitad de precio. Sin querer.

Te pide que los vuelvas a pesar.

Pero, ¿no estaba ya todo en el ticket? No pasa nada, se modifica el precio y la caja lo tendrá en cuenta. Ahora ya puedes pagar.

Sacas la tarjeta, haces la broma que les encanta absolutamente a todos los cajeros y que nunca han oído de “¿qué he roto?” y cierras la cuenta. ¡Enhorabuena! Acabas de hacer un commit. Ahora tienes una copia detallada de todo lo que has comprado y los cambios que has hecho antes de pagar.

git commit -m "La compra para el cumpleaños"

El hummus sigue en la caja, contigo, pero lo compras para que tus amigos puedan disfrutar de él. Entonces del supermercado lo llevas a casa. Con esto consigues que los artículos estén no sólo disponibles en el local, sino en un sitio público. Has hecho un

git push origin la_casa_de_tu_amigo

Llegas por fin al cumpleaños y ves que te habían pedido otra marca de ginebra. Vuelves y, al tener el ticket, te dejan cambiar la botella. Sacas un segundo ticket donde se hace la devolución de uno y el pago de otra.

Ahora tienes dos tickets (commits), sin los cuales no podrías haber hecho los cambios.

Hasta aquí todo sencillo. Pero, “¿Qué quieren decir las palabras head, index e stage? Las leo siempre que busco documentación sobre git”. Probablemente te hayas encontrado con esto:

y también:

y te hayan entrado ganas de llorar. Es normal, podemos llorar juntos.

De una forma simplificada:

  • Los recuadros verdes son códigos identificadores de los commit.
  • HEAD simplemente se refiere al ticket y al estado de los productos con los que está trabajando el cajero.
  • El index se refiere a los productos listos para pagar. A menudo index y Stage se utilizan de forma intercambiable. Pongamos que el staging area es la zona donde embolsas. Pero hasta que no pagues, index y staging area serán lo mismo.

Al final, lo que tienes que recordar es que para comprar algo tienes que escanearlo, pagarlo y llevártelo. O en palabras de git: add, commit & push.

  • Si no pagas, no podrás llevártelo → Si no haces commit, no podrás hacer push.
  • Si no tienes un ticket, no podrás hacer una devolución → No podrás revertir cambios si no puedes acceder a un commit anterior.
  • Escanea sólo lo que quieres pagar. No te interesa llevar un ticket con las berlinas que te has comido de camino a la fiesta de tus amigos realfooders → No hagas “add” de archivos con información sensible como contraseñas. Si nunca los añades a git, nunca los publicarás.

Por hacer un esquema del símil:

  • La tienda → tu ordenador 💻
  • Los artículos → tus archivos 📄
  • La caja → tu repositorio 📂
  • El cajero→ Git 🖌
  • La caja (la máquina) → el archivo oculto .git dentro de tu repositorio. El registro 🕵️‍♂️
  • El ticket → tu commit 📜
  • Llevarte los artículos a casa → subir los archivos de local a la nube ☁️

--

--