Quando Git e la gestione dei branch incontrano Avengers: Endgame
When I first saw Avengers: Endgame in theaters, I noticed that their time travel rule is quite similar to the Git branching model.
Quando ho visto per la prima volta Avengrs: Endgame al cinema, ho notato che la loro regola per i viaggi nel tempo è molto simile al modello di branching di Git
Può sembrare una comparazione completamente fuorviante, eppure, leggendo gli esempi che LJ Miranda fa in questo suo articolo dal titolo What can the Avengers: Endgame teach us about Git? viene facile capire che, in fondo, quello che hanno fatto gli Avengers in Endgame è stato creare dei branch.
Ed il plot, che ormai non consideriamo più uno spoiler, viene spiegato con cinque esempi ed altrettante spiegazioni sui relativi comandi git:
- Fast-forward merge: la rappresentazione di un path lineare nella sequenza delle modifiche. Di fatto quindi cinque anni dopo la decapitazione di Thanos. Quindi il più classico dei workflow:
git checkout -b five-years-later master
git add <file>
git commit -m "Add new events in history"
git checkout master
git merge five-years-later - Checkout a point in the past: identificare il momento in cui si vuole agire, ossia il momento precedente alla distruzione delle gemme da parte di Thanos. Ed a proposito di questo, sapevate di poter utilizzare questo comando per poter vedere tutta la storia delle modifiche applicate a un file?
git log --all --full-history
Fatto questo si può determinare quale sia l’hash della modifica interessata e fare “un viaggio nel tempo” per recuperarla:
git checkout <SHA> -- <path/to/file>
- Headless and stray branches: e qui le cose iniziano a complicarsi. Perché ogni volta che gli eroi tornano nel passato per procurarsi una gemma, sono in una headless branch, e quindi creano delle realtà alternative:
git checkout <SHA>
A questo punto per includerla nella realtà attuale, il gioco è il solito, si fanno le modifiche:
git checkout -b feat/get-time-stone
mv the_ancient_one/time_stone hulk
Molto semplice, ma con una nota: quando Captain America e Iron Man falliscono il primo tentativo e Loki fugge con la gemma dello spazio, viene creata una stray branch, ossia quella che potremmo definire una realtà alternativa della realtà alternativa. Semplice no?
git add .
git commit -m "Retrieve time stone from Ancient One"
git checkout master
git merge feat/get-time-stone
- Merge conflict: quando Thankos si presenta nella realtà “fixata” con le nuove gemme si crea una situazione di conflitto:
$ git merge feat/get-power-stone
Che può essere sanata solo dall’intervento (fix) di Iron MAn, che sistema il conflitto e completa il merge.
Auto-merging plan_for_the_future_of_humanity.txt
CONFLICT (content): Merge conflict in plan_for_the_future_of_humanity.txt
Automatic merge failed; fix conflicts and then commit the result.
- Rewriting history (?) with rebase: rimane da restituire le gemme, ci pensa Captain America… A colpi di rebase, con qualche colpo di scena (quindi un commit aggiuntivo), come il voler rimanere nella timeline passata con Peggy.
Al netto del divertissment offerto dal paragone di un film con la gestione dei branch di git, sono molti gli spunti che emergono, dall’articolo del quale consigliamo la lettura.
A volte imparare nuovi comandi Git può essere decisamente divertente e poi insomma, diciamolo chiaro al buon LJ Miranda: complimenti per la fantasia!
Se vuoi sostenerci, puoi farlo acquistando qualsiasi cosa dai diversi link di affiliazione che abbiamo nel nostro sito o partendo da qui oppure alcune di queste distribuzioni GNU/Linux che sono disponibili sul nostro negozio online, quelle mancanti possono essere comunque richieste, e su cui trovi anche PC, NAS e il ns ServerOne. Se ti senti generoso, puoi anche donarmi solo 1€ o più se vuoi con PayPal e aiutarmi a continuare a pubblicare più contenuti come questo. Grazie!
Hai dubbi o problemi? Ti aiutiamo noi!
Se vuoi rimanere sempre aggiornato, iscriviti al nostro canale Telegram.Se vuoi ricevere supporto per qualsiasi dubbio o problema, iscriviti alla nostra community Facebook o gruppo Telegram.
Cosa ne pensi? Fateci sapere i vostri pensieri nei commenti qui sotto.
Ti piace quello che leggi? Per favore condividilo con gli altri.