Perchè un webdesigner dovrebbe sempre utilizzare un software di controllo versione

subversion logo

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!

Gianluigi Cusimano è un web developer freelance, studente in ingegneria informatica e attualmente collabora con Giglio.com. Utente GNU/Linux da diversi anni si chiede, come sempre senza risposta, cosa mai lo spinse un giorno a installare quella specie di curioso animale domestico.

13 Commenti

  1. Francesco Caruccio

    Salve, vorrei integrare sulla questione software lato Mac.
    Su Mac attualmente utilizzo Svn e ne ho provato diversi, su Mac. Solo uno mi ha soddisfatto e lo trovo di qualità pari o superiore a Tortoise per Windows, si chiama: Cornerstone.

    Risposta
  2. Infrid

    Grazie del contributo 🙂

    Risposta
  3. Nicola Amatucci

    Io sinceramente consiglio un sistema di controllo versione sempre, anche quando si scrive un documento di testo molto lungo, perché oltre a tener traccia dei cambiamenti, permette sempre di poter tornare al passo precedente. Per un team è uno strumento indispensabile, anche se per introdurlo là dove non è utilizzato è un’ardua sfida (o almeno per me lo è stata). Consiglio tra gli altri anche Bazaar (di Canonical) e Mercurial in abbinamento con il software EasyMercurial, disponibile per varie piattaforme (free) e che semplifica la vita anche ai neofiti. Ovviamente Git. Subversion (svn) ha perso molta della mia fiducia poiché molte volte (su Windows almeno) si è “impallato” e, almeno la prima volta, recuperare il lavoro è stata un’impresa ardua.

    Risposta
  4. Infrid

    Nicola puoi raccontare le difficoltà incontrate per introdurre la cosa al team?

    Risposta
  5. Nicola Amatucci

    La prima difficoltà è stato farne capire l’importanza: inizialmente lo si vedeva come lavoro in più da fare. La seconda difficoltà è stata l’introduzione dell’operazione di “merge”, che a quanto pare dal punto di vista di chi non usa un sistema di controllo versione distribuito, è un po’ più difficile da capire. Ora si va alla grande.

    Risposta
  6. camu

    TortoiseSVN è il minimo indispensabile per ogni sviluppatore che si rispetti. Pensa che nel nostro caso l’intero server web di sviluppo è “versionato”, così possiamo pubblicare gli aggiornamenti e testarli e tornare indietro se qualcosa non funziona. Poi nel mio caso ho anche il server SVN in locale, così da pubblicare sul server di sviluppo solo roba già testata…

    Risposta
  7. Infrid

    Intero server significa anche le directory con i file di systema e il db?

    Risposta
  8. camu

    No, scusa, i file di sistema no. Solo i file web, il db e le configurazioni dei vari servizi

    Risposta
  9. Claudia

    Concordo pienamente, e’ altamente necessario avere un controllo del genere; io non posso piu’ vivere senza Tortoise*.

    Ottimo articolo Infrid e, gia’ che ci siamo, visto che le mie vacanze sono terrminate da poco, complimenti per il restyle =)

    Risposta
  10. Nicola Amatucci

    @camu

    mi sento di consigliarti di dare un’occhiata nel tempo libero ad un controllo di versione distribuito, come alternativa al doppio server: locale e remoto. Con un po’ di pazienza, puoi cominciare leggendo questo

    http://hginit.com/00.html

    Saluti 😉

    Risposta
  11. Camu

    Grazie!

    Risposta
  12. Lauryn

    grazie Claudia! e visto quanti bei nuovi autori entusiasti? 😀

    Risposta
  13. Claudia

    Si Laura, un successo meritatissimo e poi, insomma, chi non vorrebbe avere un posto qui dentro? =)

    IWD si sta ingrandendo sempre piu’, a coprire un sacco di aree, e questo non puo’ che fare bene alla comunita’ =)

    Risposta

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *