W3docs

Sistema di Controllo delle Versioni

Scopri l'importanza del controllo delle versioni, i vantaggi di un VCS, i tipi principali e le infografiche di confronto.

Sistemi di Controllo delle Versioni

Un sistema di controllo delle versioni (VCS) registra le modifiche apportate a un insieme di file nel tempo, così da poter richiamare qualsiasi versione specifica in seguito. Questa pagina spiega cos'è il controllo delle versioni, perché i team di sviluppo software ne dipendono, le tre famiglie di strumenti VCS (locale, centralizzato e distribuito) e i vantaggi concreti che ciascuno offre. È il fondamento concettuale di tutto il resto del libro — una volta compreso perché esiste il controllo delle versioni, comandi come git init, git commit e git branch acquisiscono molto più senso.

Cos'è il Controllo delle Versioni?

Il controllo delle versioni è un sistema che registra le modifiche al codice sorgente (o a qualsiasi insieme di file) in modo che un team possa gestire l'evoluzione di quel codice nel tempo. Invece di sovrascrivere i file e perdere lo stato precedente, il sistema memorizza ogni modifica significativa come una revisione a cui è possibile tornare.

In concreto, il controllo delle versioni consente di:

  • Tornare indietro nel tempo — ripristinare qualsiasi versione precedente di un file o dell'intero progetto.
  • Vedere chi ha modificato cosa, e perché — ogni revisione contiene autore, data e messaggio.
  • Lavorare in parallelo — separare le linee di lavoro indipendenti in branch e unirle in seguito con un merge.
  • Confrontare le versioni — visualizzare le differenze esatte tra due punti qualsiasi della cronologia con un diff.

Perché è Importante

Il controllo delle versioni è essenziale nel momento in cui più di una persona — o più di una macchina, o anche solo tu nel corso del tempo — tocca una codebase. Permette a più sviluppatori di lavorare separatamente senza sovrascriversi a vicenda, per poi integrare le modifiche in modo tracciabile. Trasforma anche "ho rotto qualcosa e non so cosa" in una domanda a cui puoi rispondere: puoi individuare la modifica esatta che ha introdotto un bug e annullare solo quella.

Anche in un progetto individuale, il controllo delle versioni offre una rete di sicurezza. Puoi sperimentare liberamente, sapendo che ogni stato funzionante è salvato e recuperabile.

Sistemi di Controllo delle Versioni (VCS)

Un Sistema di Controllo delle Versioni (VCS) — chiamato anche Source Code Management (SCM) o Revision Control System (RCS) — è lo strumento software che implementa il controllo delle versioni: traccia le modifiche, archivia la cronologia e coordina la collaborazione.

Tre Tipi di Sistemi di Controllo delle Versioni

Storicamente, gli strumenti VCS si suddividono in tre famiglie, ciascuna delle quali risolve un problema lasciato irrisolto dalla precedente.

1. Sistemi di Controllo delle Versioni Locali

Un VCS locale conserva l'intera cronologia in un semplice database su un'unica macchina. È stato creato per prevenire errori quotidiani come modificare il file sbagliato o perdere una versione precedente copiando le directory a mano. Uno degli strumenti locali più diffusi è RCS (Revision Control System), ancora distribuito oggi. RCS memorizza insiemi di patch (le differenze tra le versioni) in modo da poter ricreare qualsiasi file com'era in qualsiasi momento.

Il limite è evidente: la cronologia risiede su un solo computer, quindi non offre vera collaborazione né protezione in caso di guasto del disco.

Sistemi di Controllo delle Versioni Locali

2. Sistemi di Controllo delle Versioni Centralizzati

Un VCS centralizzato (CVCS) archivia tutti i file versionati su un unico server centrale, e i client "estraggono" i file da quel singolo punto. Questo ha risolto il problema della collaborazione: tutti potevano vedere, in una certa misura, cosa stavano facendo gli altri, e gli amministratori disponevano di un unico punto di controllo. Per molti anni questo è stato lo standard. Esempi comuni sono CVS, Subversion (SVN) e Perforce.

Il compromesso è il singolo punto di guasto. Se il server centrale va fuori servizio, nessuno può eseguire commit o collaborare; se il suo disco viene perso senza un backup, l'intera cronologia del progetto può andare perduta con esso.

Sistemi di Controllo delle Versioni Centralizzati

3. Sistemi di Controllo delle Versioni Distribuiti

In un VCS distribuito (DVCS), ogni client non si limita a estrarre i file più recenti — esegue un mirror completo del repository, inclusa l'intera cronologia. Se il server si blocca, il clone di qualsiasi client può essere inviato per ripristinarlo. Questo rende anche la maggior parte delle operazioni rapide e utilizzabili offline, poiché la cronologia completa è in locale. Esempi includono Git, Mercurial, Bazaar e Darcs.

Questo è il modello utilizzato da Git, ed è per questo che puoi eseguire commit, creare branch, visualizzare la cronologia e fare diff senza alcuna connessione di rete. Il resto di questo libro tratta Git in profondità — inizia con Cos'è Git? e l'installazione di Git.

Vantaggi dei Sistemi di Controllo delle Versioni

I principali vantaggi di un VCS sono:

  1. Cronologia delle modifiche a lungo termine. Ogni creazione, modifica ed eliminazione di un file viene registrata per tutta la vita del progetto. Questo consente di tornare a una versione precedente per analizzare i bug e risolvere i problemi.
  2. Branching e merging. Il branching consente agli sviluppatori di lavorare in modo indipendente senza interferire tra loro. Il merging riunisce quel lavoro e porta alla superficie eventuali conflitti affinché possano essere risolti deliberatamente.
  3. Tracciabilità. Puoi tracciare ogni modifica, annotarla con un messaggio che ne descriva lo scopo e collegarla agli strumenti di gestione dei progetti e di tracciamento dei bug.

Il Controllo delle Versioni in Azione

Non hai bisogno di un server o di un team per vedere il controllo delle versioni in funzione — Git traccia la cronologia direttamente sulla tua macchina. I comandi seguenti vengono eseguiti interamente in locale: creano un repository, registrano due versioni di un file e chiedono a Git la cronologia di quel file. Provali in un terminale dopo aver installato Git.

# Create a fresh project and turn it into a Git repository
mkdir vcs-demo && cd vcs-demo
git init -q

# Tell Git who is making the changes (required for a commit)
git config user.email "[email protected]"
git config user.name "You"

# Record the first version
echo "line one" > notes.txt
git add notes.txt
git commit -q -m "Add notes.txt"

# Change the file and record a second version
echo "line two" >> notes.txt
git commit -q -am "Add a second line"

# Ask version control for the history of this file
git log --oneline

L'output di git log --oneline elenca due revisioni, dalla più recente alla più vecchia — ciascuna con un breve hash del commit e il messaggio che hai scritto:

3f8a1c2 Add a second line
9b2e4d7 Add notes.txt

(I tuoi hash saranno diversi, poiché vengono calcolati dal contenuto e dal timestamp.) Quella cronologia è il cuore del controllo delle versioni: ogni versione è salvata, etichettata e recuperabile. Per approfondire, consulta git log e git commit.

Esercizio

Pratica
Quale delle seguenti non è un tipo di Sistema di Controllo delle Versioni?
Quale delle seguenti non è un tipo di Sistema di Controllo delle Versioni?
Was this page helpful?