Per avere una pa­no­ra­mi­ca delle modifiche apportate a documenti o file, esistono i co­sid­det­ti controlli di versione. Questi salvano in un archivio tutte le versioni generate da un’ela­bo­ra­zio­ne, inclusivi di iden­ti­fi­ca­ti­vo dell’utente e va­li­da­zio­ne temporale, in modo tale che gli stati pre­ce­den­ti dei singoli dati possano essere ri­chia­ma­ti o ri­pri­sti­na­ti. Per questo è possibile vedere quali utenti abbiano apportato modifiche in un de­ter­mi­na­to momento. Gli obiettivi preposti di un sistema di questo tipo con­si­sto­no nel coor­di­na­re l’accesso comune di diversi utenti sui file e di con­sen­ti­re lo sviluppo si­mul­ta­neo di diversi branch (rami di sviluppo e scissioni). I controlli di versione nello sviluppo di software vengono di solito uti­liz­za­ti per le ap­pli­ca­zio­ni in ufficio e nei CMS. Tra i programmi più famosi per il controllo di versione ci sono Apache Sub­ver­sion (SVN) e Git, che possono essere sia in­stal­la­ti sul proprio server o richiesti ad un provider. Il servizio di hosting più famoso per progetti con Git è GitHub, mentre l’hosting di Sub­ver­sion viene offerto per esempio da RiouxSVN. Su servizi come Sour­ce­For­ge è possibile hostare entrambi i sistemi.

SVN: il suc­ces­so­re di CVS pro­get­ta­to da CollabNet

Il software libero Sub­ver­sion fu svi­lup­pa­to agli inizi degli anni 2000 da CollabNet e quasi quattro anni dopo ri­la­scia­to nella sua prima versione. Pertanto SVN fu il suc­ces­so­re di CVS (Con­cur­rent Versions System), ormai non più im­ple­men­ta­to. Nel 2009 il progetto passò all’Apache Software Foun­da­tion, da cui deriva il suo nome Apache Sub­ver­sion. 

SVN utilizza un sistema centrale di controllo di gestione. Ciò significa che esiste una cartella (re­po­si­to­ry) a cui possono accedere tutti gli utenti. Poiché le modifiche apportate non possono essere unite insieme, il sistema impedisce che due utenti elaborino con­tem­po­ra­nea­men­te lo stesso file. Così il file viene assegnato al primo utente che vi accede e durante l’ela­bo­ra­zio­ne è segnalato agli altri utenti come “protetto da scrittura”. Apache Sub­ver­sion offre inoltre la pos­si­bi­li­tà di scaricare e di elaborare qualsiasi sot­to­per­cor­so in­di­pen­den­te­men­te dal resto del percorso ad albero. Per questo è possibile assegnare ai diversi lettori dif­fe­ren­ti permessi di lettura e scrittura per tutti i percorsi. Inoltre la Sub­ver­sion è ca­rat­te­riz­za­ta dal fatto che è possibile re­gi­stra­re cartelle vuote, ri­no­mi­na­te e spostate anche senza perdere la cro­no­lo­gia.

Git: la soluzione di emergenza degli svi­lup­pa­to­ri del kernel Linux

Il creatore di Linux, Linus Thorvalds, cominciò nell’aprile 2005 (più o meno in­vo­lon­ta­ria­men­te)  lo sviluppo di un nuovo software per il controllo di versione. Il motivo era che a causa di una modifica della licenza del BitKeeper uti­liz­za­to fino ad oggi, gli svi­lup­pa­to­ri del kernel di Linux persero il loro accesso gratuito. Il nuovo sistema dovrebbe offrire processi simili come BitKeeper e sicurezza contro modifiche ac­ci­den­ta­li o in­ten­zio­na­li e garantire inoltre un’elevata ef­fi­cien­za. Già pochi giorni dopo Thorvalds presentò la prima versione di Git.

Git è un sistema di controllo di gestione di­stri­bui­to. Infatti esiste una re­po­si­to­ry centrale, in cui con­flui­sco­no tutte le modifiche, anche se tutti gli utenti scaricano le loro copie di lavoro. Hanno comunque a di­spo­si­zio­ne l’intera re­po­si­to­ry inclusiva della cro­no­lo­gia a livello locale e non è ne­ces­sa­rio che rimangano co­stan­te­men­te connessi alla rete. Inoltre le modifiche vengono trasmesse molto ve­lo­ce­men­te nel re­po­si­to­ry prin­ci­pa­le. Git pertanto non offre alcun sistema di blocco, ma ogni utente crea le proprie branches che poi vengono caricate nel re­po­si­to­ry centrale; ge­ne­ral­men­te ogni utente riceve i permessi di lettura e scrittura per la directory (se dovessero tuttavia esistere diverse au­to­riz­za­zio­ni, devono essere create diverse directory prin­ci­pa­li). Ogni copia di lavoro è un backup in­di­pen­den­te della directory prin­ci­pa­le, cosa molto con­si­glia­ta qualora si verifichi un guasto o sia dan­neg­gia­to. Git registra solo i contenuti delle directory poiché le directory vuote vengono can­cel­la­te in au­to­ma­ti­co.

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 dif­fe­ren­zia­no nella struttura e nel processo che ne deriva. La seguente tabella riassume le dif­fe­ren­ze prin­ci­pa­li:

SVNGit
Controllo di versionecentraledi­stri­bui­to
Re­po­si­to­ryRe­po­si­to­ry centrale in cui vengono create le copie di lavoroCopie locali del re­po­si­to­ry su cui poter lavorare
Permesso di accessoBasato sul percorsoPer tutta la directory
Vi­sua­liz­za­zio­ne delle modificheRegistra i fileRegistra i contenuti
Cro­no­lo­gia delle modifiche Completa solo nel re­po­si­to­ry, le copie di lavoro con­ten­go­no solo la versione più recenteRe­po­si­to­ry e copie di lavoro con­ten­go­no la cro­no­lo­gia completa
Con­nes­sio­ne di reteAd ogni accessoNe­ces­sa­ria solo per la sin­cro­niz­za­zio­ne

Ecco invece i ri­spet­ti­vi 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 re­po­si­to­ry 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 im­por­tan­za a una tra­smis­sio­ne veloce delle modifiche.

Sub­ver­sion è la scelta migliore se…

  • …avete bisogno di au­to­riz­za­zio­ni 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 re­gi­stra­re com­ple­ta­men­te le strutture delle directory vuote (Git le elimina, poiché non hanno alcun contenuto).

Se le ca­rat­te­ri­sti­che elencate non rivestono un‘im­por­tan­za 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 af­fi­da­bi­le come GitHub e offerte di supporto pro­fes­sio­na­li.

Vai al menu prin­ci­pa­le