Un programma per il controllo della versione consente di registrare i cambiamenti dei file di un progetto, assegnare una versione e ripristinare la situazione del progetto, riportando i file ad uno stato precedente.
Esistono diverse tipologie di software per il controllo di versione, le principali sono:
- Local version control system
- Centralized version control system
- Distribuited version control system
Esaminiamo brevemente le peculiarità, i vantaggi e gli svantaggi di ciascuna tipologia prima di affrontare il sistema da noi scelto Git, che appartiene alla terza categoria “Distribuited version control system.
Local version control system
Un sistema LVCS si basa su un unico database che gestisce tutti i cambiamenti subiti dai file di cui si vuole tenere traccia della versione.
Come si evince dalla figura, un sistema di versioning locale risiede su una macchina e con l’ausilio di un database gestisce le versioni dei file di un progetto. Un tale sistema è, però, poco adatto per quelle situazioni in cui più persone partecipano al progetto e quindi hanno la necessità di condividere e modificare i file. Un altro svantaggio di un sistema di versioning locale è dovuto al fatto che funzionando su un singolo computer, qualora questo venisse danneggiato sarebbe impossibile operare fino al suo ripristino.
Centralized version control system
Un sistema di versioning centralizzato presenta un unico nodo che gestisce il database delle versioni. I client si collegano al sistema, scaricano i file, apportano le modifiche e alla fine aggiornano la situazione sul nodo centrale.
Il vantaggio di questo sistema è che in ogni momento tutti hanno contezza dello stato del progetto e di cosa ogni partecipante al progetto stia facendo.
Lo svantaggio di un tale sistema è dovuto al fatto che, essendoci un solo nodo che gestisce il tutto, qualora il server centrale non fosse accessibile, nessuno sarebbe in grado di lavorare.
Distribuited version control system
L’ultima tipologia, che è quella in cui rientra git, si distingue per il fatto che ogni client possiede una copia completa del repository del progetto, non ha bisogno di informazioni provenienti da altri computer, e quando c’è una nuova versione da condividere, il client esegue un’operazione di merge sul repository centrale o su quello di un altro client che partecipa al progetto.
Questa tipologia supera tutte le problematiche emerse durante l’esame dei precedenti sistemi.
Funzionamento di Git
Il funzionamento di git è caratterizzato da una serie di istantanee dei file del progetto, in pratica, ogni volta che si salva lo stato di un progetto, git scatta un’istantanea dei file memorizzandola nel repository.
La figura mostra uno scenario tipico dello stato di avanzamento di un progetto gestito con git.
Nella figura i nodi tratteggiati indicano che quel file non ha subito variazioni da una versione alla successiva e quindi non viene memorizzato, ma viene generato un riferimento al file originale, ciò evidenzia anche quanto sia efficiente il sistema di versioning git.
Gestione di un progetto con git
I files di un progetto gestito con git possono trovarsi in tre stati diversi:
committed, modified, staged.
Committed: indica che i file sono stati salvati/registrati nel database locale
Modified: indica che i file presenti nella directory di lavoro del progetto hanno subito delle variazioni
Staged: indica quei file modificati e contrassegnati per il successivo commit mediante il quale si provvederà a registrarli nel database
Possiamo pensare quindi ad un progetto git come suddiviso in tre sezioni:
- git directory
- working directory
- staging area
La directory git è dove git salva i metadati e gli oggetti database del progetto ed è ciò che va copiato quando si vuole clonare il repository in un altro computer.
La working directory è il checkout di una versione sulla quale si sta lavorando.
La staging area è un file, contenuto all’interno della cartella git, che informa quali file vanno aggiunti al prossimo commit.
Da quanto visto è facile suddividere il flusso di lavoro di un progetto gestito con git nelle seguenti fasi:
- I file presenti nella working directory vengono modificati
- I file modificati vengono contrassegnati, passando alla staging area
- Alla fine si esegue un commit per registrare un’istantanea/snapshot del progetto
Installazione di git
Installazione su linux
Distribuzione fedora:
aprire un terminale e digitare
sudo yum install git-all
Distribuzione debian/ubuntu o derivare
aprire un terminale e digitare
sudo apt-get install git-all
Installazione su windows
Puntare il browser sul link https://www.git-scm.com/download/win e quasi all’istante parte automaticamente il download del programma di installazione. A questo punto basta avviare l’eseguibile scaricato e verrà creato un link alla git-bash che è una shell di comandi che verrà usata per gestire le versioni dei progetti.
Prime impostazioni post installazione
Dopo l’installazione di git sarà utile fare alcune cose per impostare al meglio l’ambiente di lavoro.
La prima cosa da fare è cliccare sul link che apre la git-shell e digitare alcuni comandi per impostare il nominativo dell’utente predefinito associato ai progetti gestiti da git e la sua mail.
git config --global user.name "Francesco Chiriaco"
mediante questo comando si imposta il nominativo dell’utente globale che usa git, qualora per un progetto specifico si volesse cambiare utente, sarà sufficiente digitare all’interno della cartella che ospita il progetto lo stesso comando senza l’opzione –global.
Il comando seguente invece imposta la mail dell’utente a livello globale (predefinita per ogni progetto se non si specifica altro)
git config --global user.email francescochiriaco@esempio.com
Anche in questo caso, omettendo l’opzione –global all’interno della directory di un progetto, si può impostare un’altra mail da collegare a quello specifico progetto.
Un’altra impostazione utile è quella di assegnare un editor che viene richiamato quando si fa un commit per digitare la descrizione associata a quella specifica versione che si sta salvando; se non viene impartito il comando seguente, git userà l’editor di testo predefinito.
git config --global core.editor nano
Se si desidera controllare le impostazioni configurate è sufficiente digitare:
git config --list
verrà mostrato l’elenco di tutte le impostazioni registrate.
Se si desidera controllare un’impostazione specifica è sufficiente digitare:
git config impostazione.desiderata
es.
git config user.name
verrà in questo caso restituito il nome dell’utente di git.
Per ottenere aiuto sulla sintassi di un comando basta digitare:
git help <comando>
es.
git help config
Termina qui questo articolo, nel prossimo vedremo come utilizzare git per gestire il versioning nei nostri progetti.