W3docs

Cos'è Git

Definizione e importanza di Git: prestazioni, sicurezza e flessibilità come sistema di controllo delle versioni.

Questo capitolo spiega cos'è Git, perché è diventato lo standard per il tracciamento del codice sorgente e come le sue scelte progettuali — cronologia distribuita, archiviazione indirizzata per contenuto e branch economici — si traducono in vantaggi concreti per sviluppatori e team. Al termine capirai dove si inserisce Git, vedrai i pochi comandi per iniziare e saprai quali capitoli correlati leggere successivamente.

Definizione

Git è un sistema di controllo delle versioni (VCS) che registra le modifiche a un insieme di file nel tempo, permettendoti di richiamare qualsiasi versione precedente, vedere chi ha cambiato cosa e lavorare sullo stesso progetto in parallelo senza sovrascriversi. È il VCS più utilizzato nello sviluppo software.

Git è stato creato nel 2005 da Linus Torvalds, l'autore del kernel Linux, per gestire il codice sorgente di Linux dopo che il progetto aveva perso l'accesso al suo strumento precedente. Oggi alimenta progetti di ogni dimensione, da un singolo script fino al kernel Linux stesso.

La caratteristica distintiva di Git è che è distribuito. Invece di mantenere la cronologia del progetto su un unico server centrale, ogni sviluppatore clona una copia completa del repository — cronologia inclusa — sulla propria macchina. Puoi eseguire commit, creare branch, visualizzare la cronologia e cercare nel log completamente offline; hai bisogno della rete solo per condividere il lavoro con gli altri.

Distribuito vs. centralizzato. In un VCS centralizzato (come Subversion), esiste un unico server autorevole e la creazione di un commit richiede una connessione di rete. In un VCS distribuito come Git, ogni clone è un backup completo, la maggior parte delle operazioni è locale e quindi veloce, e non esiste un singolo punto di guasto.

Importanza di Git

Git è un VCS distribuito, veloce ed efficiente, in grado di gestire progetti di qualsiasi dimensione, dai piccoli script alle grandi codebase. Alcune ragioni per cui è importante nel lavoro quotidiano:

  • Branch locali economici. Creare un branch è quasi istantaneo perché Git scrive solo un piccolo puntatore, quindi sperimentare in isolamento è la norma piuttosto che l'eccezione. Vedi git branch.
  • Un'area di staging comoda. Git ti permette di scegliere esattamente quali modifiche includere nel prossimo commit prima di registrarlo, mantenendo ogni commit focalizzato. Vedi git add.
  • Workflow multipli. Lo stesso strumento supporta un singolo sviluppatore e un team di 100 persone. Vedi Git workflows.
  • Libero e open source. Non ci sono costi di licenza e il codice sorgente è aperto per ispezione e contributi.
  • Sviluppo non lineare. Molte linee di lavoro possono procedere in parallelo ed essere unite in seguito, consentendo a sviluppatori e team di lavorare separatamente senza disturbarsi.

Source Code Management

Prestazioni di Git

Git è progettato per la velocità, e la maggior parte di essa deriva dal fatto che le operazioni vengono eseguite sul repository locale anziché su un server remoto. Creare branch, eseguire merge e commit, e confrontare versioni precedenti sono tutte operazioni ottimizzate per sembrare istantanee anche su cronologie di grandi dimensioni.

Una decisione progettuale chiave è che Git traccia i contenuti, non i file. Quando esegui un commit, Git memorizza uno snapshot del contenuto di ogni file; se un file non è cambiato tra un commit e l'altro, Git memorizza un puntatore al contenuto identico che ha già anziché una nuova copia. Poiché l'archiviazione è basata sul contenuto, Git può rilevare quando un file è stato semplicemente rinominato, diviso o riorganizzato. Su disco, gli oggetti del repository utilizzano una combinazione di delta encoding (memorizzando le differenze tra oggetti simili) e compressione zlib, che mantiene compatte anche le cronologie lunghe.

Sicurezza di Git

La priorità principale di Git è l'integrità del codice sorgente gestito. Ogni oggetto in un repository — contenuti dei file, directory, commit e tag — è identificato da un hash crittografico del suo contenuto. Poiché l'hash di ogni commit incorpora anche l'hash del suo genitore, l'intera cronologia è concatenata: modificare qualsiasi contenuto passato cambierebbe ogni hash successivo, rendendo rilevabile qualsiasi manomissione silenziosa.

Git ha storicamente utilizzato SHA-1 per questi hash e sta transitando verso SHA-256 per rafforzare tale garanzia. Oltre all'integrità, puoi anche verificare chi ha eseguito un commit firmando commit e tag con una chiave GPG o SSH, in modo che i revisori possano confermare che una modifica proviene da un autore fidato.

Flessibilità di Git

Uno dei vantaggi offerti da Git è la sua flessibilità in diversi aspetti:

  • Tracciamento delle modifiche – Ogni commit contiene un autore, un timestamp e un messaggio, quindi hai sempre un registro leggibile di cosa è cambiato e perché.
  • Backup e ripristino – Poiché ogni clone contiene la cronologia completa, la macchina di ogni sviluppatore è effettivamente un backup e qualsiasi stato passato può essere ripristinato.
  • Collaborazione – I team possono lavorare sullo stesso progetto contemporaneamente e combinare il loro lavoro tramite il merge.
  • Branch e merge – Il lavoro avviene su un branch, e una volta revisionato e approvato, viene unito al branch principale. La cronologia mostra chi ha modificato ogni file e esattamente quali righe differiscono.
  • Deployment – Git non distribuisce il codice da solo, ma traccia versioni esatte e si integra perfettamente con le pipeline CI/CD che compilano e distribuiscono tali versioni.

Flessibilità di Git

Controllo delle Versioni con Git

Al giorno d'oggi, Git è il sistema di controllo delle versioni più apprezzato perché ha quasi tutto ciò di cui gli sviluppatori hanno bisogno per ottenere risultati più efficaci. I principali motivi sono elencati di seguito:

  • Git è così popolare che la maggior parte degli sviluppatori può lavorarci anche prima di laurearsi. Inoltre, Git è considerato la base dei sistemi di controllo delle versioni, perché gli sviluppatori che hanno già imparato a utilizzarlo possono facilmente padroneggiare gli altri.
  • Grazie alla sua diffusione, molti importanti strumenti e servizi software sono integrati con Git.
  • Esistono molti libri, tutorial e persino siti web specializzati che possono aiutare gli sviluppatori a imparare Git.
  • Poiché Git è un software open source, gli sviluppatori hanno la possibilità di utilizzarlo senza pagare alcun costo.

Il principale motivo per cui Git viene criticato è la difficoltà di apprendimento. In particolare, alcuni termini utilizzati in Git possono avere definizioni diverse rispetto ad altri VCS. Tuttavia, vale la pena impararlo, poiché la capacità di usare Git è un ottimo vantaggio per team e sviluppatori individuali ed è una delle chiavi del loro successo futuro.

Le soluzioni Git più popolari

Diverse piattaforme di terze parti gestiscono repository Git e sono ampiamente utilizzate per lo sviluppo software rapido ed efficace. I servizi di hosting basati su Git più popolari sono GitHub, Bitbucket e GitLab.

GitHub è un host di repository basato su Git, lanciato originariamente nel 2008 da Tom Preston-Werner, Chris Wanstrath e PJ Hyatt. È la piattaforma di hosting di repository più grande con oltre 38 milioni di progetti. Permette di ospitare e revisionare codice, gestire progetti e sviluppare software.

Bitbucket è stato lanciato nel 2008 da una startup australiana e supportava originariamente solo progetti Mercurial. Nel 2010 Bitbucket è stato acquistato da Atlassian e dal 2011 ha iniziato a supportare l'hosting Git, che ora è il suo obiettivo principale. Fornisce repository privati illimitati gratuiti, integrazione con Jira e Trello e continuous delivery integrata.

GitLab è iniziato come progetto di Dmitriy Zaporozhets e Valery Sizov nel 2011, con l'obiettivo di fornire un'alternativa alle soluzioni di gestione dei repository disponibili. La società è stata però incorporata solo nel 2014. Fornisce continuous integration e delivery, sviluppo agile, Auto DevOps, ecc.

Comandi Git di Base

Una volta che Git è installato, alcuni comandi principali coprono il flusso di lavoro quotidiano:

  • git init – Crea un nuovo repository Git nella directory corrente.
  • git clone <url> – Scarica un repository esistente, con cronologia completa, da un server remoto.
  • git add <file> – Mette in staging le modifiche in modo che vengano incluse nel prossimo commit.
  • git commit -m "message" – Registra le modifiche in staging come nuovo snapshot con un messaggio descrittivo.
  • git status – Mostra quali file sono stati modificati, messi in staging o non tracciati.
  • git push – Carica i commit locali su un repository remoto.

Un primo repository, dall'inizio alla fine

La sequenza seguente avvia un nuovo progetto, registra un primo commit e ne esamina il risultato. Esegui questi comandi in una cartella vuota per seguire l'esempio:

# 1. Start tracking the current folder
git init

# 2. Create a file and stage it for the next commit
echo "# My Project" > README.md
git add README.md

# 3. Record the snapshot
git commit -m "Add project README"

# 4. See the history you just created
git log --oneline

L'output di git log --oneline è una riga per commit — un hash breve seguito dal messaggio:

a1b2c3d (HEAD -> main) Add project README

Da qui potresti aggiungere un remote e usare git push per condividere il lavoro, oppure creare un branch per iniziare una nuova funzionalità. Il capitolo git log approfondisce la lettura della cronologia.

Esercitazione

Pratica
Quali sono le caratteristiche e i vantaggi principali di Git?
Quali sono le caratteristiche e i vantaggi principali di Git?
Was this page helpful?