Introduzione
Git è un sistema di controllo versione distribuito creato originariamente da Linus Torvalds nel 2005 per lo sviluppo del kernel Linux. Tiene traccia delle modifiche ai file nel tempo, consente la collaborazione tra più persone e fornisce a ogni sviluppatore una copia completa della storia del progetto. Oggi Git alimenta la maggior parte dello sviluppo software open source ed enterprise nel mondo.
Cos'è Git
Git è un sistema di snapshot indirizzato per contenuto. Ogni commit memorizza un'immagine completa dei file tracciati del progetto, identificata da un hash crittografico. Git è veloce perché la maggior parte delle operazioni è locale, ed è resiliente perché ogni clone è un backup completo.
- Distribuito: ogni clone è un repository completo.
- Basato su snapshot: i commit memorizzano alberi, non diff.
- Adatto al branching: i branch sono puntatori leggeri, non copie complete.
Cosa Git non è
Git non è uno strumento di backup, non è un sistema di code review e non è una piattaforma di deployment. Non blocca i file come i sistemi centralizzati (CVS, SVN, Perforce in modalità predefinita). Non memorizza efficientemente i diff binari per file multimediali grandi senza estensioni come Git LFS. E Git non è GitHub: GitHub, GitLab e Bitbucket sono servizi di hosting costruiti sopra Git.
Provarlo
Verifica che Git sia installato e controlla la versione:
git --version
Inizializza un piccolo repository per vedere Git in azione:
mkdir hello-git
cd hello-git
git init
echo "hello" > readme.txt
git add readme.txt
git commit -m "first commit"
git log --oneline
Perché Git ha vinto
Prima di Git, la maggior parte dei team usava strumenti centralizzati che richiedevano l'accesso alla rete per quasi ogni azione. Il modello distribuito di Git ha permesso agli sviluppatori di fare commit, branch e revisioni della storia offline. Combinato con il branching economico e l'adozione da parte del kernel Linux, Git è diventato lo standard di fatto in un decennio. La diffusa disponibilità di hosting gratuito su piattaforme come GitHub, GitLab e Bitbucket ha consolidato il posto di Git: una generazione di sviluppatori ha imparato Git come primo sistema di controllo versione.
Come Git memorizza i dati
Il modello di archiviazione di Git è insolito. Invece di registrare i diff tra le versioni, Git memorizza snapshot completi di ogni file in ogni commit, deduplicati per hash di contenuto. Questo rende operazioni come checkout e cambio di branch essenzialmente a tempo costante, e rende le operazioni sulla storia come log e blame sorprendentemente veloci. Il compromesso è che modifiche binarie casuali possono far esplodere lo spazio di archiviazione, ed è per questo che esiste Git LFS per gli asset di grandi dimensioni.
Errori comuni
I principianti confondono spesso Git con GitHub, o assumono che Git tracci automaticamente ogni file in una cartella. Git traccia solo i file su cui si esegue esplicitamente git add, e versiona solo il contenuto sotto la directory di lavoro di un repository inizializzato. Un altro mito: Git "salva" continuamente. Non lo fa. Niente viene registrato finché non si esegue git commit. Infine, Git non è progettato per asset binari di grandi dimensioni; usa Git LFS o un sistema diverso per video, dataset grandi o artefatti compilati.