Git breve guida al suo utilizzo

Git è un software di controllo di versione, realizzato da Linus Torvalds. È uno strumento, molto utile per lo sviluppatore perché consente di tenere traccia di tutte le modifiche che fai ad un sofware, e in caso in cui ad un progetto lavorino più sviluppatori, si è in grado di vedere chi ha effettuato una determinata modifica.

Prima di usare git, quando sviluppavo software, se facevo delle modifiche, e poi mi rendevo conto che qualcosa non andava, dovevo annullare manualmente tutte le modifiche, ma se le modifiche erano tante diventava un gran casino. Oppure mi creavo una copia del file, andavo a modificare la copia e quando per poi mettere le modifiche nel file originale, una volta che la modifica era stabile e funzionante. Grazie a git, tutte queste complesse procedura, vengono semplificate, non avete bisogno di annullare le modifiche (con CTRL-Z, che oltretutto ha una serie di limiti che non lo rendono una buona soluzione), non avete bisogno di fare copie del file a cui state lavorando.

Commit

In sostanza con Git è come se create un’istantanea (commit) del vostro progetto, in determinati momenti (ad esempio, dopo aver fatto sostanziali modifiche, o dopo aver aggiunto nuove funzioni, dopo aver corretto svariati bug) così che andando a rileggere tutta la storia dei cambiamenti, è chiaro capire cosa è accaduto.

Branch

altra cosa molto interessante di Git, è la possibilità di suddividere il proprio progetto in una struttura ad albero, dove ad esempio suddividiamo il nostro progetto in più rami (branch) ed ogni ramo proseguirà il suo sviluppo parallelamente, senza essere legato agli altri rami, poi alla fine, questi rami possono riunirsi al ramo principale (merge) per fondere insieme le modifiche. Questo ad esempio può essere utile se nel vostro software avete una versione stabile e una versione testing. Nel ramo principale (master) avete la versione stabile e funzionante, così vi create un secondo branch dove per aggiungere funzionalità, e quando questo branch sarà stabile, lo unirete al ramo principale, così avete la nuova versione pronta per essere rilasciata. A questo punto il ciclo si ripete e potete riniziare a lavorare sulla versione testing del vostro software.

git
branch

Configurazione

Per prima cosa effettuiamo la configurazione passando a git il nostro nome e la nostra email, in questo modo quando all’interno del progetto faremo una modifica, git terrà traccia di chi ha effettuato le modifiche (indispensabile in un progetto di gruppo).

Possiamo fare 2 tipi di consigurazione:

globale

applica la configurazione a tutto il sistema, e quindi anche ad altri progetti git nello stesso PC.

git config --global user.name "tuo nome"
git config --global user.email "tua email"
git config --global core.editor "il tuo editor"

locale

applica la configurazione, solo a questo progetto git, quindi se ci spostiamo in un progetto situato in un’altra directory (con una sua cartella .git), dovremo rieffettuare la configurazione

git config --local user.name "tuo nome"
git config --local user.email "tua email"
git config --local core.editor "il tuo editor"

Git init

È il comando che serve per iniziare a tener traccia dei cambiamenti.

Quindi proviamo ad usarlo, spostiamoci in una cartella, apriamo un terminale e digitiamo il comando

git init

A questo punto verrà creata una cartella nascosta “.git” contenente tutti i file di git. Ora tutte le modifiche che faremo alla nostra cartella, verranno tracciate da git.

 

Git Status

un file può avere 4 diversi stati

  • untracked
  • staged
  • modified
  • committed

Untracked

Un file che non è ancora tracciato da git. Ad esempio quando inizializziamo git in una cartella che contiene gia dei file, inizialmente questi file saranno untracked. Oppure, appena creiamo un file, prima che lo aggiungiamo al database, sarà untracked.

Modified

Il file è stato modificato dall’ultimo salvataggio nel database

Staged

In questo stato il file è contrassegnato per essere salvato nel database. Vedremo meglio dopo cosa significa.

Committed

Il file è stato salvato dentro al database di git

Tramite il comando

git status

possiamo vedere lo stato dei nostri file.

Comandi

add

git add <nomefile>

Questo comando serve per iniziare a tracciare un file untracked. Oppure per far passare un file modificato, nella staging area (ovvero stato Staged) così che poi potrà essere committato.

commit

git commit

Questo comando serve a committare tutte le modifiche effettuate, e a salvare il file nel database di git.

log

git log

Serve per mostrare tutte le commit apportate al nostro progetto. Mostra chi ha effettuato la commit, la data della commit, e il messaggio della commit.

branch

git branch <nome branch>

Permette di creare un nuovo branch (un nuovo ramo).

checkout

git checkout <nome branch>

Effettua il cambio del branch, così possiamo spostarci ad esempio dal branch master, al branch test (e viceversa)

merge

git merge <nome branch da unire>

Questo comando, effettua l’unione di 2 branch. Nello specifico verrà unito il branch <nome branch da unire> al branch in cui siamo attualmente posizionati.

Quindi se ci troviamo nel branch master, con il comando  git merge test uniamo portiamo le modifiche apportate al branch test nel branch master

 

Esempi

Esempio Stati

Torniamo alla nostra cartella e iniziamo a vedere un po di pratica.

Per prima cosa inizializziamo il progetto con il comando

git init

a questo punto se digitiamo il comando

git status

avremo un output del genere

git
git status

Proviamo a creare un file (ad esempio “esempio.py”, ovvero un software python) contenente

#!/usr/bin/env python
# -*- coding: latin-1 -*-

 

A questo punto se rieseguiamo il comando

git status

vedremo che il file “esempio.py” si trova in stato “untracked“.

git
stato untracked

e viene evidenziato in rosso.

A questo punto il file è pronto per essere aggiunto alla staging area

Diamo il comando

git add esempio.py

 

git
staged status

In questo momento il file è nello stato staged ovvero è pronto per essere committato.

Se invece lo modificassimo, questo cambierebbe stato, e diventerebbe modified.

Proviamo. Aprite il sorgente, effettuate una modifica, aggiungendo per esempio

print "Hello World!"

salvatelo e date nuovamente il comando

git status

A questo punto avrete il seguente output

git
file modificato

Come vedete, git ci mostra, sia il file nello stato staged sia nello stato modified. Questo perchè, dopo aver modificato il file, noi non lo abbiamo riaggiunto al nostro database di git (tramite il comando git add): Quindi git ci informa che il file è nella staging area, ma nel frattempo abbiamo modificato il file. Se adesso effettuassimo la commit, il file che verrà aggiunto al database, non avrà l’ultima modifica effettuata.

Quindi eseguiamo nuovamente il comando

git add esempio.py

A questo punto possiamo vedere che non c’è più il file nello stato modified, in quanto lo abbiamo aggiunto alla staging area.

Ora possiamo finalmente effettuare la commit, ovvero salvare il file nel database di git

git commit -m "initial commit"

-m è l’opzione per aggiungere un messaggio per far spiegare brevemente cosa è successo in questa commit. In questo caso ho semplicemente detto che è stata fatta una commit iniziale, ma potete scriverci quello che volete. (ovviamente non ha molto senso scrivere solo “modificato il file esempio.py” in quanto questo ce lo dice già git).

git
git commit

 

Esempio Branch

Creiamo ora un nuovo branch.

git branch test

A questo punto il ramo è stato testato, se vogliamo spostarci all’interno di esso, usiamo il comando

git checkout test

Ora siamo all’interno del branch “test”

Possiamo controllare in ogni momento il branch in cui siamo, tramite il comando

git status

A questo punto tutte le modifiche che facciamo verranno applicate solo a questo branch, lasciando intatto il branch master.

Quando vorremo unire il branch test a master, ci basterà spostarci (tramite checkout) al branch master e digitare il comando

git merge test