Controllo di versione GIT

HOME | BLOG | Git e i vantaggi degli strumenti di controllo versione

Git, il tuo alleato per ogni tipo di progetto

Gestire con efficienza piccoli e grandi progetti, dalla scrittura di codice all’elaborazione di testi o immagini, in autonomia o in team, utilizzando uno strumento semplice e intuitivo (e gratuito!), con la possibilità di sfruttare numerosi plus, come quello di lavorare su più rami di progetto o di tornare indietro a un precedente step di lavorazione. Tutto questo è possibile con Git!

Controllo di versione Git: cos’è e quali vantaggi comporta

Gli strumenti di controllo versione sono concepiti per permettere di tenere traccia di cosa viene fatto e dei diversi step di lavorazione in fase di scrittura del codice, ma anche in numerosi altri campi.
Gli strumenti di controllo versione, infatti, aiutano gli sviluppatori a risalire al punto di partenza precedente una modifica del codice o del file oggetto di lavorazione, permettendo di correggere facilmente eventuali errori o di individuare il punto esatto in cui hanno iniziato a sorgere problemi. La loro utilità è poi ancora maggiore quando più persone lavorano al medesimo progetto, perché tutti i file di lavoro pre-modifiche restano archiviati in un repository e ognuno può farne una copia sul proprio pc, così da lavorare esclusivamente in locale. In questo modo, le modifiche vengono applicate anche sul repository comune solo una volta che la singola persona è certa di non aver commesso errori, con la garanzia che nel frattempo sia sempre presente una copia del file originario a cui poter risalire.

Uno degli strumenti di controllo versione più utilizzati è Git, creato nel 2005 da Linus Torvalds per semplificare lo sviluppo del Kernel di Linux.

Nato quindi come progetto in seno a Linux, Git si è evoluto nel tempo fino a diventare uno degli strumenti di controllo versione più utilizzati, anche grazie ai suoi numerosi punti di forza. Come è intuibile dal suo creatore, Git nasce come software libero e il suo utilizzo è sempre stato gratuito. Il suo sviluppo avviene infatti anche in risposta alle soluzioni al tempo presenti sul mercato: giudicate da Torvalds come spesso poco soddisfacenti, molte di esse erano anche a pagamento.
Gli strumenti di controllo versione come Git nascono in ambito di scrittura del codice, per cui sono frequentemente utilizzati, ma possono essere impiegati anche per lavori molto diversi, come la lavorazione collaborativa di testi e immagini o nell’ambito dei progetti CAD. Si tratta infatti di strumenti versatili e agili, utili per tenere traccia di tutto quanto viene modificato e da chi, su qualsiasi tipo di file.

Flessibilità, agilità, possibilità di lavorare in locale e struttura a rami sono alcuni dei punti di forza legati all’utilizzo di Git.

Abbiamo già parlato del metodo di lavoro che consente di operare in locale sul proprio pc intervenendo sulla directory centrale solo a lavoro perfezionato. Questo è un notevole punto di forza di per sé, perché consente ad esempio di non fermare il lavoro quando non è possibile connettersi al server centrale, ma lo è ancora di più quando si lavora in modo collaborativo con altri sviluppatori. Non si tratta di un plus scontato: altri strumenti di controllo versione, come ad esempio SVN, sono centralizzati.
Git, poi, è legato ad una struttura a grafi e consente quindi di generare diversi workflow, grazie alla possibilità di utilizzare agevolmente diversi rami di sviluppo. Partendo da un ramo principale, che rappresenta lo stato dell’arte dello sviluppo del software in un dato momento, è infatti possibile staccarsi creando un ramo secondario. Questo ramo di sviluppo rimane parallelo a quello primario, ma ne diventa indipendente: le modifiche apportate qui non andranno ad intaccare quanto presente sul ramo principale. Dal ramo principale, così come dai vari rami secondari è poi possibile creare ulteriori ramificazioni. Git ha reso molto facile lavorare su una struttura ramificata come quella qui descritta, semplificando anche il rientro sul ramo principale: il ramo di sviluppo parallelo può essere abbandonato e morire, oppure alcuni suoi pezzi possono essere riportati sul ramo principale, senza necessità di riportare tutto il ramo secondario in blocco.
Questo avviene ovviamente sempre sotto un controllo di versione e le modifiche inserite sul ramo principale riportano il nome di chi le ha effettuate. È importante sottolineare che Git permette in ogni caso di tornare sempre indietro nel tempo, recuperando versioni precedenti del file system, senza che nulla venga cancellato: in questo modo è sempre possibile apportare modifiche differenti da quelle realizzate in prima istanza. Il repository principale conserva quindi tutta la storia del file e funge anche da unità di controllo delle modifiche che i vari utenti vogliono apportare.

Git è poi estremamente utile nel caso di sviluppo collaborativo, ovvero quando più mani lavorano al medesimo progetto.

Ad esempio, se due persone cercano di fare un upload sul repository principale in contemporanea, possono sorgere dei problemi di collision, perché le modifiche apportate da persone diverse sono tra loro incompatibili o sono state eseguite nello stesso punto del codice. In questo caso gli strumenti di controllo versione come Git segnalano il problema, evidenziando come le modifiche siano state apportate su una versione del file precedente a quella ora presente sul repository. Per comprendere l’utilità di questa funzione basti pensare all’ambito di applicazione per cui Git è nato, ovvero il Kernel di Linux, su cui lavorano migliaia di persone. Appare evidente come, in casi simili, questa feature sia essenziale.
Se gli strumenti di controllo versione sono utili quando si lavora a più mani, lo sono anche per chi lavora in autonomia, grazie alla possibilità di recuperare una versione precedente del proprio lavoro, di conservare in locale delle copie e la memoria storica di quanto fatto, di visionare le modifiche apportate per capire in che punto sono sorti dei problemi.

L’utilizzo di Git, inoltre, è abbastanza semplice, anche quando rapportato ad altri strumenti di controllo versione.

I comandi, ad esempio, hanno nomi intuitivi e svolgere le operazioni di base è abbastanza facile. Git può essere utilizzato da riga di comando, ma alcuni siti che fanno servizio di hosting di Git mettono a disposizione anche delle interfacce, offrendo così delle alternative alla modalità di utilizzo più “tecnica”. Github è un esempio di sito che offre un servizio di hosting per progetti software e ospita oltre 200 milioni di repository e relativi software open source. Di proprietà di Microsoft dal 2018, GitHub rimane una risorsa gratuita a disposizione di sviluppatori e aziende. L’utilizzo degli strumenti di controllo versione, infatti, non è appannaggio di poche nicchie, ma è sfruttato anche da grandi realtà e aziende: basti pensare ad alcuni nomi che utilizzano GitHub, come Google e Apple.
Altri esempi di siti con funzioni simili sono GitLab, che ha visto aumentare il numero di progetti importati dopo l’acquisizione di GitHub da parte di Microsoft, e BitBucked.

L’utilizzo di strumenti di controllo versione, oltre ai vantaggi già evidenziati, consente anche di esplorare facilmente nuove strade e possibilità.

Ad esempio, durante la realizzazione di un progetto può capitare che emergano nuove strade e possibilità da esplorare. L’utilizzo di Git, o di altri strumenti di controllo versione, permette di farlo staccando un nuovo ramo dal progetto principale. Questo può poi riconfluirvi o può dare origine a un progetto ex novo, diventandone il ramo principale.

Git consente inoltre di sfruttare diverse strategie di branching, col solo vincolo di mantenere quella scelta per un dato progetto.

I rami possono infatti essere organizzati e gestiti nel modo di volta in volta più conveniente. Ad esempio, si può decidere di dedicare il ramo principale esclusivamente alle versioni di release di un software, continuando a lavorare sui rami secondari. Ogni volta che si arriva a un punto stabile, il software torna sul ramo principale e viene effettuata una release. Sul rampo principale rimane quindi il software stabile e distribuito, oltre alla storia di tutte le sue release.
Questa concezione permette anche a persone che iniziano a lavorare su un software di comprenderne la storia e la lavorazione nel tempo, potendovi intervenire con maggiore semplicità.

La concezione del software open source, su cui tutti (o molti) possono intervenire sfruttando strumenti di controllo versione, non preclude però un certo livello di controllo.

Esistono infatti repository, proprio come quelli del Kernel di Linux, che prevedono una rigida gerarchia: molti sviluppatori a livello globale cercano di dare un contributo al repository remoto principale Git del Kernel di Linux, ma le richieste di modifica vengono di volta in volta valutate e implementate o meno.
Chiunque crei un repository Git può infatti decidere con chi condividerlo e i diversi livelli di condivisione possibili: alcuni utenti potranno ad esempio accedere al software e modificarlo in locale, ma non riportare le loro modifiche sul repository principale. La costituzione di simili gerarchie, per cui non tutti coloro che hanno accesso al repository hanno gli stessi permessi, pur preservando il lavoro a più mani garantisce che non sia possibile compromettere il repository con troppa facilità.
Quando si lavora con Git, nonostante lo strumento di controllo versione stesso aiuti a evitare l’insorgere di problemi e conflitti, è comunque essenziale seguire alcune regole di buon senso. Ad esempio, quando si sviluppa del software sui repository Git, è necessario tenervi i file sorgenti, evitando invece di caricare i file binari.
Ci sono alcuni software gratuiti, come ad esempio VLC, che al momento del download consentono di scegliere tra lo scaricare il file binario eseguibile o l’andare sul repository Git e scaricare i file sorgenti, potendo così vedere come è scritto il software. È il caso anche di alcune app a pagamento, per cui è invece possibile scaricare gratuitamente il file sorgente.

Ovviamente, Git è utilizzabile anche per lavorare su progetti proprietari che non siano open source.

Anche il team di Idem-tech, ad esempio, usa dei repository Git per lo sviluppo di diversi progetti, appoggiandosi anche a dei siti di hosting Git. In questo caso però i repository sono privati e accessibili solo ai membri del team di lavoro.
L’utilizzo di Git è quindi valido e ampiamente sfruttato sia per software liberi che proprietari, sia da parte di grandi aziende – come ad esempio Google, Microsoft, Netflix e Meta, solo per citarne alcune – che di piccoli team di lavoro e singoli sviluppatori.

Il consiglio dell’esperto

Un utilizzo pratico di Git può riguardare la raccolta e l’importazione tra i branch di determinate commit, un’operazione che si chiama “Cherry Pick”.
Per esempio, se sul branch master è stata fatta una release “v0.1”, ma ci si è poi accorti di aver introdotto un bug, è possibile sviluppare un branch parallelo in cui si corregge tale bug. Si esegue poi una commit della correzione sul nuovo branch e, facendo il checkout sul branch master, si può eseguire il Cherry Pick della sola commit con il bug fix ed emettere così la “v0.2” che corregge il bug precedentemente introdotto.

Quindi, per riassumere in command line quanto detto:

git tag -a “V_0_1” -m “Rilascio versione 0.1”
git branch bug_fix_v01
git checkout bug_fix_v01

 

Si eseguono poi le modifiche necessarie per risolvere il bug:

git commit -m “Modifiche per risoluzione bug v01”

La commit appena fatta sul branch “bug_fix_v01” avrà un codice identificativo, ad esempio “1234abcd”

git checkout master
git cherry-pick 1234abcd
git tag -a “V_0_2” -m “Rilascio versione 0.2”