Skip to content

Modulo 02 — Introduzione a Git

Il controllo di versione è un software che traccia e gestisce le modifiche ai file nel tempo. In pratica permette di:

  • tornare a versioni precedenti dei file;
  • confrontare le modifiche tra versioni;
  • annullare cambiamenti;
  • collaborare e combinare il lavoro di più persone.

Git è uno di questi sistemi (altri noti: Subversion, CVS, Mercurial), ma è quello dominante: nei sondaggi Stack Overflow viene indicato da circa il 90% degli sviluppatori, al punto che le survey recenti smettono nemmeno di chiedere.

Le due architetture: centralizzato vs distribuito

Section titled “Le due architetture: centralizzato vs distribuito”

I VCS più vecchi (Subversion, CVS) seguono il modello centralizzato: un unico server conserva la history “ufficiale”; chi lavora prende in prestito i file dal server e li riconsegna. Se il server muore, resta solo ciò che ognuno ha nel proprio checkout.

Modello centralizzato VCS centralizzato: un solo server contiene la history, i client hanno solo copie dei file.

Git invece è distribuito: ogni clone contiene la history completa del progetto. Il repository remoto (es. su GitHub) è solo un punto di scambio — se sparisce, chiunque possieda un clone può ricostruire tutto.

Modello distribuito VCS distribuito come Git: ogni client è un mirror completo della history.

Un’altra particolarità che distingue Git: molti sistemi salvano i file come differenze progressive rispetto alla versione base; Git invece memorizza, a ogni commit, uno snapshot completo del progetto (riutilizzando i riferimenti ai file invariati). Lo approfondiamo nel modulo 04 e nel modulo 18.

Snapshot vs differenze Approccio a differenze (sinistra) vs approccio a snapshot di Git (destra).

  • Traccia le modifiche su più file contemporaneamente.
  • Permette di confrontare versioni di un progetto.
  • Fa “viaggiare nel tempo”: si torna a versioni vecchie e si riparte da lì.
  • Permette di annullare modifiche recenti.
  • Facilita collaborazione e condivisione delle modifiche, e la loro fusione.

Il modo più semplice per capire Git: è come il salvataggio in un videogioco. Prima di affrontare una parte difficile, salvi; se muori, riparti dal salvataggio invece che dall’inizio.

Sul progetto si procede allo stesso modo: si crea un “checkpoint” (commit) dopo ogni passo significativo (inizializzazione, aggiunta della navbar, prima riga di contenuti, tema scuro…). Se un collega critica i colori, si torna indietro al checkpoint giusto; se il percorso alternativo merita, si può continuarlo come timeline separata (branch) e in seguito combinare due linee di lavoro.

Linus Torvalds — l’autore di Linux — nel 2005 era frustrato dai VCS esistenti (lenti, closed-source, a pagamento). Il 3 aprile 2005 inizia a scrivere il proprio VCS: in pochi giorni la funzionalità base era pronta, il primo rilascio ufficiale arrivò dopo qualche mese. Il nome “Git” ha letture ironiche (già lui lo definì “un stupido tracker di contenuti”): tra le interpretazioni ufficiali, “global information tracker” quando funziona, e una frase meno elegante quando si rompe.

  • Sviluppatori (da big tech a startup): praticamente obbligatorio.
  • Ruoli tech-adjacent: designer e altri spesso collaborano tramite Git.
  • Governo: es. il consiglio comunale di Washington DC pubblica le leggi su Git/GitHub, con cittadini che contribuiscono correggendo errori.
  • Scienziati: gestione di codice e dataset, utile nel mondo peer-review.
  • Scrittori: bozze di romanzi/sceneggiature, libri a più autori.
  • Chiunque: diari, tesi, file Photoshop, persino composizioni musicali.

| | Git | GitHub | | --- | --- | | Che cos’è | Software di version control | Servizio di hosting per repo Git | | Dove gira | In locale, sulla tua macchina | Nel cloud | | Serve un account? | No | Sì | | Serve internet? | No | Sì | | Dipendenza | Si usa benissimo senza GitHub | Esistono alternative (GitLab, Bitbucket, …) |

La history che hai in locale si può caricare su GitHub per condividerla: GitHub è il posto dove il lavoro fatto con Git viene condiviso e collaborativo.


Immagini: documentazione ufficiale di Git (git-scm.com, dal libro Pro Git di Scott Chacon), licenza CC BY-NC-SA 3.0.