subversion logoUn software di controllo versione è un programma per tenere traccia dei cambiamenti che avvengono dentro un albero di sorgenti. Vi aiuta a monitorare lo stato dei file, modifica dopo modifica avendo così l’intera storia del vostro progetto. Ogni software di una certa dimensione utilizza un sistema di questo tipo, perché oltre ad avere la storia permette di sapere quali modifiche sono state effettuate, su quali file e l’autore delle stesse.

Conoscere un software di controllo versione (da adesso in poi abbreviato scv) fa crescere professionalmente, è un importante elemento nella vostra metodologia di lavoro, se lavorate da soli avrete solo da guadagnarci e se siete in gruppo diventerà quasi indispensabile.

Quando si inizia un progetto solitamente si parte da piccoli file, o una base comune a più o meno tutti i nostri lavori. Questa piccola directory con il codice, si evolve col tempo, i file diventano numerosi e più grandi. Ogni volta che finite di implementare qualche caratteristica o funzionalità al vostro progetto, di fatto non fate altro che applicare una serie di cambiamenti ai vostri file. Il scv prende nota dei cambiamenti fatti e se volete potete associarvi una breve descrizione, dei tag o note al fine di eventuali promemoria.

Potrebbe sembrare che questo nuovo software non faccia altro che aggiungere un noioso livello di complessità al vostro flusso di lavoro, costringendovi ogni volta a dire di registrare i cambiamenti, ma in realtà vi rende molto più liberi di quanto pensiate!

Avere la storia dei vostri file protegge anche da voi stessi, capita di cancellare un file per errore oppure di modificare la parte sbagliata. Potete tornare indietro e recuperare il lavoro perduto.

Vi aiuta a scovare i bug; se avete introdotto un malfunzionamento in un determinato punto della storia del vostro progetto ma non sapete quale, potete procedere a passi. Versione dopo versione controllate la presenza del bug, osservate i cambiamenti da voi eseguiti per capire cosa è successo. Dopodiché potete creare una patch e applicare la vostra correzione a tutte le versioni.

Sarete liberi di sperimentare senza troppi problemi, pensando a cambiamenti radicali senza intaccare le versioni perfettamente funzionanti del vostro codice.

Dividendo il vostro codice in più rami, non fate altro che creare una copia del vostro progetto. Questa nuova copia è liberamente modificabile, potete stravolgere ogni file e dire al scv di tenere traccia di questa nuova versione del medesimo progetto. Non sarete dispersivi col vostro lavoro e non correte il rischio di perdervi qualche file perché tutto fa capo al scv che gestisce l’intero progetto.

Come per i file di testo, anche le immagini e in genere i file binari sono monitorati. Dietro le quinte il scv non memorizza i file vecchi per intero, ma tiene una sorta di patch con le differenza del nuovo file. In questo modo memorizza solo i cambiamenti e mai file per interi, minimizzando il consumo del disco e riducendo al minimo gli sprechi.

Se preferite (ed è anche necessario per alcuni scv) potete tenere una copia del vostro progetto su un server, e tenere sincronizzate la copia che avete sul vostro computer. In questo modo avete un backup a fronte di imprevisti e avrete un modo di mostrare i vostri file al gruppo di lavoro o l’intero web.

Qualche scenario pratico

Immaginate di iniziare un nuovo progetto, create file da zero o usate una base comune. Eseguite qualche modifica o aggiungete qualche file, in fine dite al scv di scattare una istantanea con una nota simile a inizio progetto.

Successivamente portate a termine alcuni piccoli compiti, creazione del layout di base e la scelta dei colori: altra istantanea con la nota creazione layout e palette. Dopo un bel po’ di giorni arrivate alla versione finale, anche qui create una istantanea magari taggandola con versione 1.0.

Dopo un po’ di tempo il committente vi chiede delle modifiche drastiche alla grafica lasciando inalterate alcune funzioni, cosa fate? Copiate semplicemente la cartella? No, create un nuovo ramo di sviluppo!

Ora il committente telefona segnalandovi un fastidioso bug sulla versione corrente del sito, inevitabilmente questo bug si è trasmesso anche alla nuova versione in cantiere. Riuscite a scovare il bug e applicate la correzione a tutte le versioni del progetto senza grossi sforzi.

Finita la giornata, che siano le 17 o le 5 del mattino, scattate una istantanea per salvare lo stato delle cose e sincronizzate il tutto col server. Ora potete fare le vostre 2 ore di sonno tranquilli visto che domani si romperà l’hard disk e vi ruberanno la vostra penna usb.

Quale software di controllo versione scegliere?

Oggi esistono un buon numero di soluzioni più o meno valide, perfetti per alcuni ambienti organizzativi. Io consiglio di scegliere tra git e mercurial, fanno parte nuovi sistemi cosidetti distribuiti che offrono particolari vantaggi rispetto ai classici sistemi client-server come subversion. Se lavorate su windows esistono delle ottime interfacce grafiche, che si integrano benissimo col sistema operativo come TortoiseHg, TortoiseGit e TortoiseSvn.

Sono disponibili anche servizi di hosting del codice, se in caso non potete installare il software necessario sul vostro web server. I più popolari sono github e bitbucket, ma esistono servizi per tutti i gusti.

Per iniziare a documentarvi posso segnalarvi Mercurial la guida definitiva, ottima traduzione del testo originale. Se conoscete bene l’inglese potete cimentarvi in Git Community Book e Pro Git, per subversion invece abbiamo Controllo di Versione con Subversion.

Se non vi basta e volete qualcosa di più immediato potete sempre consulare il gran numero di guide e tutorial presenti sul web. All’inizio vi sembrerà meccanico usare questi software, ma ricordate che avete solo da guadagnarci utilizzando questi strumenti. Spero di avervi chiarito le idee su cosa siano questi programmi e perché utilizzarli, buon divertimento!