Alzi la mano chi, nel proprio team di lavoro, non ha mai dovuto modificare un file in contemporanea a qualcun altro. O peggio ancora, chi non ha perso il lavoro di un giorno per colpa di un salvataggio sbagliato o una modifica accidentale? Come immaginavo, nessuna mano alzata! Sono Simone Carletti, nel video di oggi esaminiamo alcune caratteristiche dei software per il controllo di versione.
I sistemi per il controllo di versione dovrebbero essere parte integrante degli strumenti di ogni sviluppatore. Questi software tengono traccia di ogni modifica apportata ai file consentendo di ripristinare immediatamente una modifica sbagliata o esaminare le righe di un sorgente anche a distanza di giorni.
Il funzionamento di base è semplice e comune a quasi tutti i software. Si comincia definendo un repository, l'archivio che conterrà tutto lo storico delle revisioni ed i cambiamenti applicati nel tempo ai file tracciati.
Normalmente il repository principale è salvato in un'area accessibile tutti i partecipanti, come ad esempio un server o una intranet.
Ciascun utente dispone sul proprio computer locale di una copia di lavoro del repository, definita working copy.
L'utente esegue le modifiche ai file direttamente sulla propria working copy e, una volta terminate, invia le modifiche al repository principale eseguendo un COMMIT.
A questo punto, il software analizza le modifiche apportate e salva ogni singolo cambiamento tenendo traccia di ogni revisione.
In qualsiasi momento, un altro componente del team può scaricare le modifiche apportate semplicemente richiedendo al repository di aggiungere i cambiamenti recenti alla propria copia locale.
In caso di modifiche contemporanee ai file da parte di più utenti, il software provvede a fondere automaticamente i cambiamenti. In qualsiasi momento è possibile accedere ad una qualsiasi revisione di un determinato file, scoprire chi ha modificato una riga o rimosso una cartella.
I software per il controllo di versione sono conosciuti sotto diversi nomi, tra i quali: Source Code Control System, Version Control System e Source Code Management. Ne esistono essenzialmente di due tipi: centralizzati e distribuiti. Nel primo caso il repository è uno solo ed ogni utente lavora su una copia locale. Nel secondo caso, ogni copia locale è a sua volta un repository completo dell'intero storico delle revisioni.
Il primo sistema per il controllo delle versioni a diffusione globale è stato Concurrent Version System, anche conosciuto come CVS.
Per far fronte alle numerose limitazioni di CVS, nel 2000 nasce Subversion. In poco SVN è diventato il sistema di versioning più diffuso e lo è ancora oggi, nonostante le numerose alternative disponibili. Nel 2008 il team di sviluppo ha rilasciato l'attesissima versione 1.5 che ha finalmente integrato molte delle modifiche da tempo attese ed un supporto più adeguato alla gestione delle branch.
Più recentemente, sistemi distibuiti come Git e Mercurial hanno saputo ricavarsi la loro fetta di mercato. Il primo è stato sviluppato per il versionamento del codice sorgente del Kernel Linux ed è molto diffuso in ambito open source. Il secondo vanta la gestione di progetti come NetBeans, Mozilla e OpenSolaris.
Usare un software per il controllo delle versioni non è solo un'ottima soluzione di backup contro danni accidentali. È come avere a disposizione un'enorme macchina del tempo ed un unico archivio di tutti i file di un progetto. Uno strumento ideale ed essenziale per lo sviluppo.
Tutti i software di cui abbiamo parlato sono gratuiti ed open source.
Usare un sistema per il controllo di versione non è complesso, la maggior parte si integra perfettamente con gli editor di sviluppo. Non c'è alcun motivo per cui valga la pena rinunciare ad un così utile compagno di lavoro.