W3docs

Software di Controllo Versione

Informazioni utili sul software di controllo versione: vantaggi e svantaggi degli strumenti più diffusi.

Che cos'è il software di controllo versione?

Il software di controllo versione (VCS) è uno strumento che registra le modifiche a un insieme di file nel tempo, in modo da poter richiamare qualsiasi versione precedente, vedere chi ha modificato cosa e combinare il lavoro di più persone senza sovrascriversi a vicenda. È la colonna portante di qualsiasi flusso di lavoro software collaborativo ed è indispensabile nel momento in cui più di una persona tocca una codebase.

Questa pagina illustra le due famiglie di software di controllo versione, presenta gli strumenti più conosciuti con i loro compromessi e ti aiuta a decidere quale si adatta al tuo progetto. Se vuoi prima comprendere il concetto di base, leggi Sistema di Controllo Versione; per scoprire perché Git in particolare ha avuto successo, consulta Che cos'è Git.

Centralizzato vs. distribuito

Quasi ogni VCS rientra in una di due architetture, e la differenza influenza tutto il resto.

  • Centralizzato (CVCS): un singolo server contiene la cronologia canonica. I client estraggono una copia di lavoro e inviano le modifiche direttamente a quel server. Esempi: CVS, SVN. Il vantaggio è un'unica fonte della verità e un semplice controllo degli accessi; lo svantaggio è che occorre l'accesso di rete per eseguire il commit, e il server rappresenta un singolo punto di guasto.
  • Distribuito (DVCS): ogni clone è una copia completa dell'intero repository, inclusa tutta la cronologia. Si eseguono commit, si gestiscono branch e si visualizza la cronologia in locale e offline, per poi sincronizzarsi con gli altri quando si è pronti. Esempi: Git, Mercurial, Monotone. Questo rende la maggior parte delle operazioni istantanee ed elimina il singolo punto di guasto, a fronte di un modello mentale leggermente più complesso.

Il design distribuito di Git è il motivo principale per cui creare branch ed eseguire commit sembrano istantanei — non c'è nessun viaggio di andata e ritorno verso un server. Ogni clone effettuato con git clone contiene già la cronologia completa del progetto.

Strumenti più diffusi

Git

Git è lo standard de facto dei sistemi di controllo versione distribuiti oggi. È veloce, efficiente e gestisce progetti di qualsiasi dimensione. I suoi punti di forza distintivi sono la creazione di branch locali a basso costo (vedere git branch), un'area di staging pratica (vedere git add) e il supporto per molti flussi di lavoro. È un software libero e open source.

Git

Limitazioni. Il supporto per file binari di grandi dimensioni è debole di default — anche se Git LFS affronta questo problema. Le operazioni possono rallentare su repository molto grandi con cronologie lunghe, e la vastità dei comandi può risultare opprimente per i principianti.

CVS

CVS (Concurrent Versions System) è un sistema centralizzato storicamente molto diffuso, ma oggi largamente obsoleto, superato dai moderni strumenti distribuiti. Registra la cronologia di file e documenti e funziona su quasi tutte le piattaforme hardware e i sistemi operativi. È un software libero e open source.

CVS

Limitazioni. CVS non verifica l'integrità del repository e manca di commit atomici, tracciamento dei merge e revisioni firmate — carenze che hanno direttamente motivato la creazione dei suoi successori.

SVN

SVN (Apache Subversion) è un sistema di controllo versione centralizzato ampiamente utilizzato nel corso degli anni 2000 e ancora presente in alcuni ambienti enterprise e legacy. Le sue funzionalità includono directory con versioning, commit atomici, tracciamento dei merge, operazioni di copia/spostamento/rinomina/eliminazione di prima classe, un modello client–server, metadati con versioning in forma libera, supporto MIME completo e blocco dei file. È un software libero e open source.

SVN

Limitazioni. I tempi di modifica dei file non vengono memorizzati, la normalizzazione dei nomi di file può essere problematica tra piattaforme diverse e non è supportato il versioning firmato delle revisioni.

Mercurial

Mercurial è un sistema di controllo versione distribuito scritto principalmente in Python. È veloce, supporta progetti di qualsiasi dimensione e ha un'interfaccia notoriamente prevedibile e facile da imparare. Funziona su sistemi Unix-like, Windows e macOS, gestisce bene i file binari e offre una gestione efficace dei merge e dei branch. È un software libero e open source.

Mercurial

Limitazioni. Python è richiesto per tutti i componenti aggiuntivi, i checkout parziali non sono supportati e la compatibilità con le estensioni di terze parti non è sempre ottimale.

Monotone

Monotone è un sistema di controllo versione distribuito scritto in C++. È un VCS transazionale a file singolo che offre operazioni completamente disconnesse, merge sensibile alla cronologia, branch leggeri, bassa manutenzione e sincronizzazione peer-to-peer. Funziona su Linux, Solaris, macOS, Windows e altri sistemi Unix. È un software libero e open source.

Monotone

Limitazioni. Senza il supporto HTTP, gli utenti non possono estrarre o inviare modifiche da dietro un proxy, e alcune operazioni — in particolare il pull iniziale — presentano problemi di prestazioni. Monotone è oggi largamente abbandonato e ha una rilevanza moderna limitata.

Confronto rapido

StrumentoArchitetturaStatoPunto di forzaPrincipale debolezza
GitDistribuitoStandard di settoreVelocità, branching, ecosistemaFile binari grandi, curva di apprendimento
MercurialDistribuitoMantenuto, di nicchiaInterfaccia prevedibile e sempliceEcosistema più piccolo
SVNCentralizzatoLegacy / enterpriseBlocco file, modello sempliceRichiede server per il commit
CVSCentralizzatoObsoletoImportanza storicaNessun commit atomico né controllo integrità
MonotoneDistribuitoLargamente abbandonatoForte modello di integritàNessun HTTP, pull iniziale lento

Quale scegliere?

Per quasi ogni nuovo progetto la risposta è Git: ha la community più grande, il miglior supporto di hosting (GitHub, GitLab, Bitbucket) e il tooling più ricco. Scegli un'alternativa solo quando un vincolo concreto ti spinge in quella direzione:

  • Mercurial — se il tuo team preferisce un insieme di comandi più ridotto e coerente e non sei legato all'ecosistema Git.
  • SVN — se hai bisogno di un blocco file rigoroso per asset binari non unificabili, o gestisci un flusso di lavoro centralizzato già esistente.
  • CVS / Monotone — generalmente solo per la manutenzione di un repository legacy esistente; da evitare per nuovi progetti.

Una volta scelto Git, il passo successivo è installarlo e imparare come funziona in pratica la gestione del codice sorgente.

Esercitazione

Pratica
Quale di queste non è una caratteristica di Git come software di controllo versione?
Quale di queste non è una caratteristica di Git come software di controllo versione?
Was this page helpful?