Git - git modelli di branching

Git – Alcune considerazioni

Git è il sistema di controllo di versione disribuito, che rapidamente ha assunto un ruolo fondamentale nello sviluppo collaborativo di software. In questo post non tratterò le funzionalità e le caratteristiche di questo tool (in rete sono presenti numerosi articoli, documenti, guide e libri sull’argomento), ma cercherò di fissare alcuni punti che spesso mi vengono chiesti durante i corsi.

Se è già presente un software per la gestione del codice sorgente, che dovrà essere sostituito con Git, questo è sicuramente il primo problema da affrontare. Non tanto per il setup, per l’infrastruttura o la migrazione ma semplicemente per il diverso approccio.

L’utilizzo di Git necessita un cambio di mentalità!

Confrontando, ad esempio, Git con SVN la prima differenza (forse sconcertante!) è quella che in Git il progetto è l’unità indivisibile del lavoro. Git  lavora sempre con tutto il codice sorgente e non su singole directory e singoli file. Inoltre, Git memorizza sempre i file nella loro interezza: ad ogni modifica (anche di una sola riga) nella nuova versione viene comunque memorizzato il file completo.

Svn memorizza le differenze, ed eventualemente ricostruisce i file nella loro interezza

Il repository di Git memorizzato all’interno del computer locale. Il computer locale contiene la copia completa di quello che è memorizzato sul server centrale.

Git memorizza i file nella loro interezza, ed eventualmente visualizza le differenze (delta)

Il primo cambio di mentalità (dimenticando Svn) è sicuramente la struttura dei file memorizzati nel filesystem: un’architettura simile ai record chiave/valore di un database. Ogni volta che viene eseguito il commit viene memorizzato nel database interno un record (sempre di tipo chiave/valore). Inoltre ogni commit contiene anche un puntatore al commit padre (permettendo, ad esempio, le operazioni di navigazione tra commit).

Un nuovo concetto presente in Git è index: è lo spazio dove mediante git add vengono aggiunti i file che diventeranno il nuovo commit. Al momento dell’esecuzione di git commit l’index diventerà il nuovo commit.

Il comando cherry-pick

Git ha all’attivo circa 150 comandi che consentono di gestire tutte le operazioni sui repository. Un comando che desta sempre una certa curiosità è cherry-pick. Questo comando consente di applicare i cambiamenti presenti in commit ad un altro commit presente nel repository.

Il funzionamento del comando cherry-pick è piuttosto banale, ma con potenzialità infinite: git calcola le motifiche che sono state fatte da un commit e le applica da qualche altra parte (ad esempio su master).

Per poter utilizzare cherry-pick è necessario posizionarsi sul branch su cui applicare le modifiche ed indicare il nome del branch sorgente:

Nell’esempio precedente dopo esserci posizionati su master, chiediamo a git di riportare tutte le modifiche del commit presente in SOURCE_BRANCH.

Un’altro comando molto utilizzato è rebase. Se, ad esempio, durante lo sviluppo di un branch, all’interno di master sono stati aggiunti commit, potrebbe risultare comodo “agganciare” le modifiche direttamente su master. Un pò come “viaggiare nel tempo”, o meglio agganciare il nostro ultimo commit (o il gruppo di ultimi commit ) eseguiti sul branch di sviluppo ed agganciarli sull’ultimo commit di master. La soluzione più immediata potrebbe essere quella di utilizzare il comando cherry-pick visto in precedenza, eseguendolo tante volte quanti sono i commit che vogliamo riportare su masterrebase fa proprio questo per noi. Si tratta di una macro che esegue una serie di cherry-pick per raggiungere il nostro obiettivo. Una volta spostati sul ramo corrente con il comando:

vengono riportati tutti i commit del ramo corrente sull’ultimo commit di master.

Pubblicato da

Andrea Merlin

Laureato in informatica, diversi corsi di specializzazione legati allo Sviluppo Software e alla Computer forensics. Appassionato di nuove tecnologie, amo la programmazione, la Business Intelligence e tematiche legate alla Privacy.Sempre alla ricerca di nuove idee, stimoli … e progetti da seguire!Amo trascorrere il tempo libero in Val Borbera, un piccolo angolo del Piemonte, in provincia di Alessandria.