Subversion è uno strumento di sviluppo utile per gestire il lavoro collaborativo di più persone in contemporanea sullo stesso progetto.
Attenzione, non parlo di project management lato organizzativo, si parla proprio di lavoro in termini di operatività pratica: modifica di file, sviluppo e programmazione. Subversion è a sua volta un software, gratuito e multi piattaforma.
Introduzione a Subversion
Chi ha avuto il piacere, ed alcune volte il privilegio, di poter programmare in ambito collaborativo con altri sviluppatori avrà senz'altro toccato con mano uno degli aspetti più complicati di quest'attività: la sincronizzazione delle versioni.
Immaginate la situazione.
Gino e Pino sono due sviluppatori che stanno lavorando allo stesso progetto.
Non è assolutamente raro che Gino e Pino, nonostante si siano coordinati al meglio per portare avanti in contemporanea uno il backend e l'altro il frontend dell'applicativo, si trovino a dover lavorare e modificare nello stesso momento i file di connessione con il database.
Gino scopre un bug e lo corregge immediatamente.
Pino invece, ha appena modificato aggiungendo un nuovo percorso al database... caspita, un file è stato modificato due volte, come fare?
Subversion risolve proprio questo (e molti altri) problemi.
Gino e Pino possono lavorare tranquillamente sullo stesso file e, al termine, inviare al repository le modifiche.
Il sistema si preoccuperà di avvertire l'uno che l'altro ha già inviato delle modifiche allo stesso file per gestire nel modo più corretto il merge delle modifiche.
Glossario Subversion
Nelle prossime righe leggerete diversi termini che potrebbero risultare novità.
Ecco un breve glossario.
SVN o Subversion
SVN è il nome abbreviato di Subversion.
SVN è anche il nome del file eseguibile del programma, richiamato ogni volta che è necessario eseguire un comando.
Ad esempio, per aggiornare la propria working copy è possibile eseguire via shell il comando
svn update
Repository
Con il termine repository si intende l'archivio di dati centralizzato gestito direttamente da Subversion.
Il repository è la copia centralizzata alla quale inviare i file modificati e dalla quale scaricare le versioni più aggiornate dei file.
Working Copy
Se il repository è la copia online centralizzata, la working copy è esattamente l'opposto e rappresenta la copia locale dello sviluppatore.
E' la versione alla quale l'utente applica le proprie modifiche in locale, per poi inviarle in fase finale al repository.
Revisione
Ogni aggiornamento "inviato" al repository rappresenta una nuova revisione.
Subversion applica ad ogni modifica un numero identificativo incrementale da 1 a infinito.
Ad esempio, se ho scaricato dal repository la versione 15 ed ho aggiornato 3 file, nel momento in cui andrò ad inviare le modifiche nuovamente al repository il risultato finale sarà il commit della versione 16.
Commit ed Update
commit ed update sono i due comandi fondamentali di Subversion.
commit è l'operazione di invio della working copy al repository.
Viceversa, update è la fase di download della versione aggiornata del repository con aggiornamento della propria working copy.
Subversion: logica base del funzionamento
Immaginate un repository di Subversion come un grande magazzino di dati.
Per ora non ci interessa conoscerlo in modo più tecnico e, tra l'altro, non è scopo di questo articolo.
Il funzionamento base del sistema si può riassumere come segue
working copy
Ogni utente ha una copia del repository sul proprio computer (chiamata working copy).
modifica
L'utente esegue le modifiche sulla propria copia locale e, al termine, invia al repository remoto gli aggiornamenti.
invio modifiche
Il repository riceve gli aggiornamenti, aggiorna la copia remota ed assegna un nuovo numero progressivo alla revisione.
update contemporanei
A questo punto, chiunque può disporre della versione aggiornata. Nel caso in cui qualcuno tenti di inviare delle modifiche ad un file appena aggiornato, il repository inverà un messaggio d'avviso.
Attraverso i tool di SVN è possibile gestire quale revisione e quale singola modifica deve essere mantenuta.
In caso di conflitto, è possibile gestire il merge delle revisioni.
Subversion client vs server
Il funzionamento di Subversion si basa sul seguente concetto.
Il repository è uno unico, gestito da una installazione di Subversion Server.
Subversion server ha il compito di organizzare il salvataggio e la gestione completa delle revisioni.
Ogni utente dispone invece di una versione si Subversion Client.
Il client è l'interfaccia al repository. Interpreta tutti i comandi necessari per scaricare una revisione, inviare gli aggiornamenti ed analizzare le modifiche.
Come essere subito operativi con Subversion
Essere subito operativi con Subversion potrebbe non essre così immediato.
E' necessario disporre di un server che supporti SVN per evitare l'installazione e la configurazione della versione server.
A tal scopo valutate cosa offre il vostro provider. Ad esempio Dreamhost lo integra nei propri piani di hosting.
A questo punto, scaricate il client Subversion per il vostro sistema operativo.
Per evitare di impazzire via shell, esistono poi diverse interfacce grafiche di supporto.
Per Windows consiglio vivamente TortoiseSVN che integrandosi in Explorer fornirà immediatamente i comandi attraverso l'interfaccia di Windows.
Per essere certi che SVN sia stato installato sul vostro computer provate a digitare via shell il comando
svn --version
In risposta dovreste ricevere la versione di Subversion installata
svn, versione 1.4.2 (r22196) compilato Nov 3 2006, 16:53:07
Da questo momento siete operativi... vi manca solo un repository su cui lavorare!
Comandi base per il vostro repository Subversion!
Create il vostro repository secondo le istruzioni fornite dal provider.
In seguito potrete gestire la sincronizzazione attraverso i seguenti comandi.
svn checkout
Il checkout esegue una copia del repository remoto sul vostro computer, creando una working copy locale.
Immaginate ad esempio di voler scaricare sul vostro computer una copia del repository di Simplepie, localizzata all'indirizzo http://svn.simplepie.org/simplepie/trunk.
Via shell portatevi nella cartella dove volete creare la working copy e digitate il comando
svn checkout http://svn.simplepie.org/simplepie/trunk simplepie
Et voilà il nostro nuovo repository SVN contiene l'ultima revisione di simplepie, nel mio caso la 567.
La stessa operazione era gestibile anche da TortoiseSVN scegliendo il comando checkout dal menu contestuale.
Nota. In alcuni casi potebbe essere necessario autenticarsi ad un repository.
Non tutti i repository, infatti, sono aperti pubblicamente. Spesso sono protetti da nome utente e password.
svn update
Ogni qual volta volete scaricare la versione aggiornata del repository non è necessario eseguire un checkout.
Il comando update provvederà a verificare la vostra revisione e scaricare solo i file aggiornati dall'ultimo update eseguito.
Nel mio caso, il comando
svn update
non ha scaricato alcun file poiché disponevo già dell'ultima revisione.
Anche in questo caso Tortoise permette di gestire tutto direttamente con un click del mouse.
svn commit
Il commit è l'operazione inversa all'update.
Eseguendo un commit della vostra working copy al repository, invierete al server i file modificati.
I file verranno analizzati, le modifiche integrate nel repository e la revisione incrementata di uno.
Per eseguite un commit è necessario disporre dei permessi di scrittura nel repository, associati ad una username e password.
Ogni commit può prevedere un messaggio utile per analizzare in seguito i log delle revisioni.
Per eseguire un commit consiglio, soprattutti ai neofiti, di ricorrere a strumenti con interfaccia grafica, come TortoiseSVN, che agevolano notevolmente l'operazione.
Conclusioni
Obiettivo di questo articolo non era fornire la guida definitiva a Subversion, bensì descriverne a grandi linee il funzionamento.
Per approfondimenti è possibile visitare il sito di Subversion, la pagina su Wikipedia o il libro guida gratuito.
In alternativa, state sintonizzati su questo blog! ;)