Git vs. SVN: controllo di versione centralizzata e distribuita

Per avere una panoramica delle modifiche apportate a documenti o file, esistono i cosiddetti controlli di versione. Questi salvano in un archivio tutte le versioni generate da un’elaborazione, inclusivi di identificativo dell’utente e validazione temporale, in modo tale che gli stati precedenti dei singoli dati possano essere richiamati o ripristinati. Per questo è possibile vedere quali utenti abbiano apportato modifiche in un determinato momento. Gli obiettivi preposti di un sistema di questo tipo consistono nel coordinare l’accesso comune di diversi utenti sui file e di consentire lo sviluppo simultaneo di diversi branch (rami di sviluppo e scissioni).

I controlli di versione nello sviluppo di software vengono di solito utilizzati per le applicazioni in ufficio e nei CMS. Tra i programmi più famosi per il controllo di versione ci sono Apache Subversion (SVN) e Git, che possono essere sia installati sul proprio server o richiesti ad un provider. Il servizio di hosting più famoso per progetti con Git è GitHub, mentre l’hosting di Subversion viene offerto per esempio da RiouxSVN. Su servizi come SourceForge è possibile hostare entrambi i sistemi.

SVN: il successore di CVS progettato da CollabNet

Il software libero Subversion fu sviluppato agli inizi degli anni 2000 da CollabNet e quasi quattro anni dopo rilasciato nella sua prima versione. Pertanto SVN fu il successore di CVS (Concurrent Versions System), ormai non più implementato. Nel 2009 il progetto passò all’Apache Software Foundation, da cui deriva il suo nome Apache Subversion. 

SVN utilizza un sistema centrale di controllo di gestione. Ciò significa che esiste una cartella (repository) a cui possono accedere tutti gli utenti. Poiché le modifiche apportate non possono essere unite insieme, il sistema impedisce che due utenti elaborino contemporaneamente lo stesso file. Così il file viene assegnato al primo utente che vi accede e durante l’elaborazione è segnalato agli altri utenti come “protetto da scrittura”. Apache Subversion offre inoltre la possibilità di scaricare e di elaborare qualsiasi sottopercorso indipendentemente dal resto del percorso ad albero. Per questo è possibile assegnare ai diversi lettori differenti permessi di lettura e scrittura per tutti i percorsi. Inoltre la Subversion è caratterizzata dal fatto che è possibile registrare cartelle vuote, rinominate e spostate anche senza perdere la cronologia.

Git: la soluzione di emergenza degli sviluppatori del kernel Linux

Il creatore di Linux, Linus Thorvalds, cominciò nell’aprile 2005 (più o meno involontariamente)  lo sviluppo di un nuovo software per il controllo di versione. Il motivo era che a causa di una modifica della licenza del BitKeeper utilizzato fino ad oggi, gli sviluppatori del kernel di Linux persero il loro accesso gratuito. Il nuovo sistema dovrebbe offrire processi simili come BitKeeper e sicurezza contro modifiche accidentali o intenzionali e garantire inoltre un’elevata efficienza. Già pochi giorni dopo Thorvalds presentò la prima versione di Git.

Git è un sistema di controllo di gestione distribuito. Infatti esiste una repository centrale, in cui confluiscono tutte le modifiche, anche se tutti gli utenti scaricano le loro copie di lavoro. Hanno comunque a disposizione l’intera repository inclusiva della cronologia a livello locale e non è necessario che rimangano costantemente connessi alla rete. Inoltre le modifiche vengono trasmesse molto velocemente nel repository principale. Git pertanto non offre alcun sistema di blocco, ma ogni utente crea le proprie branches che poi vengono caricate nel repository centrale; generalmente ogni utente riceve i permessi di lettura e scrittura per la directory (se dovessero tuttavia esistere diverse autorizzazioni, devono essere create diverse directory principali). Ogni copia di lavoro è un backup indipendente della directory principale, cosa molto consigliata qualora si verifichi un guasto o sia danneggiato. Git registra solo i contenuti delle directory poiché le directory vuote vengono cancellate in automatico.

SVN vs. Git: sistemi a confronto

Ma qual è quindi la soluzione migliore? Una risposta generica non esiste. Dipende da quale sistema di controllo di gestione si adatta meglio ai vostri scopi. Entrambi i sistemi si differenziano nella struttura e nel processo che ne deriva. La seguente tabella riassume le differenze principali:

SVNGit
Controllo di versionecentraledistribuito
RepositoryRepository centrale in cui vengono create le copie di lavoroCopie locali del repository su cui poter lavorare
Permesso di accessoBasato sul percorsoPer tutta la directory
Visualizzazione delle modificheRegistra i fileRegistra i contenuti
Cronologia delle modifiche Completa solo nel repository, le copie di lavoro contengono solo la versione più recenteRepository e copie di lavoro contengono la cronologia completa
Connessione di reteAd ogni accessoNecessaria solo per la sincronizzazione

Ecco invece i rispettivi vantaggi di entrambi i sistemi:

Dovreste preferire Git se…

  • …non volete essere sempre connessi per poter lavorare ovunque al vostro progetto. 
  • …volete sentirvi sicuri nel caso di un guasto o di una perdita di dati del repository centrale.
  • …non avete bisogno di un permesso di scrittura e di lettura per directory speciali (tuttavia queste possono essere impostate su un percorso più complesso anche con Git).
  • …date maggiore importanza a una trasmissione veloce delle modifiche.

Subversion è la scelta migliore se…

  • …avete bisogno di autorizzazioni d’accesso basate sul percorso per ambiti diversi del vostro progetto.
  • …volete legare tutto il vostro lavoro a un luogo centrale.
  • …lavorate con molti file binari.
  • …volete registrare completamente le strutture delle directory vuote (Git le elimina, poiché non hanno alcun contenuto).

Se le caratteristiche elencate non rivestono un‘importanza decisiva per voi, si consiglia un test di entrambi i sistemi di controllo di versione. In entrambi i casi sono garantiti un valido supporto da parte di una grande community, un provider affidabile come GitHub e offerte di supporto professionali.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.