Da Cvs A Svn
Settembre 29th, 2006 by ugo
Il controllo di versione è l’arte di gestire i cambiamenti delle informazioni. Tale attività è stata per molto tempo uno strumento critico per i programmatori, che solitamente passano le loro giornate ad effettuare piccoli cambiamenti ad un software per poi cancellare i cambiamenti il giorno seguente. Ma l’utilità di un software di versionamento si estende ben oltre i limiti del mondo dello sviluppo software: ovunque è possibile incontrare persone che utilizzano il computer per gestire informazioni che cambiano di frequente, lì trova spazio il controllo di versione. Nel mondo del software open source, Concurrent Versions System (CVS) è stato a lungo lo strumento preferito per la gestione delle versioni di un dato software. Un modo di operare non restrittivo, unito al supporto per il funzionamento in rete (che consente a decine di programmatori sparsi in tutto il mondo di condividere il proprio lavoro) si intona perfettamente con la natura collaborativa del mondo open source. Tuttavia, CVS ha iniziando a mostrare i segni del tempo, pertanto è stato progettato il suo successore, Subversion (SVN), con lo scopo di eliminare i difetti più evidenti di CVS ed essere uno strumento ancora più potente, usabile e flessibile.
Subversion è un sistema di controllo di versione libero e open source. Cioè Subversion gestisce files e directories nel tempo. L’alberatura dei files è inserita all’interno di un repository centrale. Il repository è paragonabile ad un file server, in più esso ricorda qualsiasi cambiamento fatto ai files e alle directories. Ciò permette di ripristinare vecchie versioni o esaminare lo storico dei cambiamenti dei dati. Subversion può accedere ai suoi repositories attraverso la rete; ciò gli permette di essere utilizzato da più persone contemporaneamente su più computers. In alcune circostanze, la possibilità per più persone di modificare e maneggiare lo stesso elenco di dati, ognuno dalle rispettive postazioni, aumenta la collaborazione.
Le sue caratteristiche possono essere riassunte molto sinteticamente come segue:
- Versionamento delle directories: CVS traccia la storia dei soli files, mentre Subversion implementa il versionamento di un filesystem “virtuale” che traccia i cambiamenti nel tempo degli interi alberi directory. Pertanto sia i files che le directories vengono versionati.
- La vera history di versione: Dal momento che CVS è limitato al versionamento dei soli files, operazioni come copia e rinomina (che dovrebbero essere propri dei files, ma che poi non sono altro che modifiche ai contenuti di ciò che contiene una directory) non sono supportate in CVS. In più, in CVS non è possibile rimpiazzare un file versionato con un nuovo file che ne erediti il nome ma non la storia perchè completamente differente dal vecchio file. Con Subversion, è possibile aggiungere, cancellare, copiare e rinominare sia files che directories. E ogni file aggiunto nuovamente, inizia con una storia nuova tutta per sè.
- Commits atomici: Un insieme di modifiche o vengono inserite nel repository tutte insieme o non ne viene inserita nessuna. Ciò permette agli sviluppatori di costruire e committare i cambiamenti come un blocco logico unico, prevenendo problemi che possono occorrere quando solo una parte di un set di modifiche vengono inviate con successo al repository.
- Versionamento dei metadata: Ogni file ed ogni directory ha un set di proprietà chiavi e rispettivi valori ad esso associati. L’utilizzatore può creare e memorizzare qualsiasi coppia chiave/valore che preferisce, arbitrariamente. Le proprietà sono soggette a versionamento esattamente come il file a cui sono associate.
- Tipologie di livelli di rete: Subversion ha una nozione astratta di accesso al repository, che rende semplice per chiunque implementare nuovi meccanismi di rete. Inoltre è possibile integrarlo con Apache HTTP Server come modulo di estensione. Ciò conferisce a Subversion un grande vantaggio in termini di stabilità e interoperabilità, oltrechè un accesso istantaneo alle caratteristiche che tale webserver mette a disposizione, tra cui l’autenticazione, l’autorizzazione, wire compression, e così via. E’ tuttavia disponibile anche un processo server standalone proprio di Subversion più leggero. Questo server è progettato su un protocollo proprio che può essere facilmente veicolato su SSH.
- Consistent data handling: Subversion esprime le differenze di un file usando un algoritmo di differenziazione binario, che lavora ugualmente sia sui files di testo (leggibili dall’uomo) che sui files binari (illeggibili dall’uomo). Entrambi i tipi di files sono memorizzati compressi nel repository e le differenze sono trasmesse in entrambi i casi attraverso la rete.
- Efficiente metodo di branching e tagging: Il costo in termini di tempo e spazio dedicato al branching e al tagging non deve essere proporzionale alla grandezza del progetto. Subversion crea branches e tags utilizzando un meccanismo simile all’hard-link unix (collegamento) per copiare il progetto. In questo modo, tali operazioni occupano solo un intervallo di tempo piccolo e costante.
- Versatilità: Subversion è implementato come una collezione di librerie C condivise con delle API ben definite. Ciò lo rende estremamente manutenibile e usabile da altre applicazioni e in altre lingue.
Per maggiori informazioni potete consultare il libro online Controllo di Versione con Subversion, dal quale è stato tratto questo articolo.


P


