git

Git: guida facile al software di controllo versione più utilizzato da sviluppatori e webmaster

Git, semplice e performante: guida illustrata all’utilizzo

Sei un programmatore? Un webmaster? Aggiorni spesso il tuo sito? Hai bisogno di creare un progetto sul quale lavorare in gruppo mantenendo traccia delle modifiche e avendo la possibilità di recuperare diverse versioni di un file o dell’intero progetto? Git è il tuo alleato vincente ed è incluso nei nostri nuovi hosting SSD.

git

Cos’è Git?

Git (che nello slang americano è tradotto come ‘idiota‘) sviluppato da Linus Torvalds per semplificare lo sviluppo del kernel Linux, oggi è uno degli strumenti di controllo versione più utilizzati. Git quindi è un sistema di controllo di versione distribuito (Distributed Version Control Systems o DVCS).  Cosa vuol dire? Vuol dire che in un sistema di controllo di versione distribuito, ciascun client fa anche da server per se stesso e possiede una copia locale del repository.

git

Git, considera i propri dati come una serie di istantanee di un mini filesystem. Ogni volta che l’utente effettua un commit o salva lo stato del proprio progetto, crea un’immagine di tutti i file presenti in quel momento, salvando un riferimento. Se alcuni file non sono stati modificati, GIT non li clona ma crea un collegamento agli stessi file della versione precedente.

Altro aspetto molto interessante è la possibilità di lavorare anche off-line con il server centrale. L’utente può lavorare sulla propria copia locale del repository e rendere pubbliche le modifiche quando il server torna online.

Come installare Git?

Scaricare Git:
Git per Linux
Git per Windows
Git per OSX

Creare un nuovo repository

Creare una cartella, entrare da linea di comando e lanciare:

git init

Crea un copia del repository

Per creare una copia locale lancia il comando:

git clone /percorso/del/repository

Per usare un server remoto, invece, il comando sarà:

git clone nomeutente@host:/percorso/del/repository

Ambiente di lavoro
La tua copia locale del repository è composta da tre “alberi” mantenuti da Git.
Il primo è la tua Directory di lavoro che contiene i files attuali.
Il secondo è l’Index che fa da spazio di transito per i files e per finire l’HEAD che punta all’ultimo commit fatto.

git

Aggiunta e validazione
Puoi aggiungere file all’Index del repository usando :

git add [nomedelfile]
git add *

Questo è il primo passo nel flusso di lavoro in git. Per validare queste modifiche fatte si usa:

git commit -m "Messaggio per la commit"

Ora il file è correttamente nell’HEAD, ma non ancora nel repository remoto.

Invio delle modifiche

Quello che hai cambiato ora è nell’HEAD della copia locale. Per inviare queste modifiche al repository remoto, esegui:

git push origin master

Cambia master nel branch al quale vuoi inviare i cambiamenti.
Se non hai copiato un repository esistente, e vuoi connettere il tuo repository ad un server remoto, c’è bisogno che tu lo aggiunga con:

git remote add origin [server]

Ora sarai in grado di inviare le tue modifiche al server remoto specificato.

I branch (ramificazioni) sono utilizzati per sviluppare features isolate l’una dall’altra. Quando crei un repository, il branch master è quello di default. Puoi usare altri branch per lo sviluppo ed infine incorporarli (‘merge’) nel master branch una volta completati.
git

Crea un nuovo branch chiamato “feature_x” e passa al nuovo branch usando:

git checkout -b feature_x

Ritorna di nuovo su master:

git checkout master

Cancella il branch creato in precedenza:

git branch -d feature_x

Il branch non sarà disponibile agli altri fino a quando non verrà inviato al repository remoto:

git push origin [branch]

Aggiorna e incorpora
Per aggiornare il tuo repository locale al commit più recente, esegui:

git pull

Nella tua directory corrente per fare una fetch (recuperare) ed incorporare (merge) le modifiche fatte sul server remoto.

Per incorporare un altro branch nel tuo branch attivo (ad esempio master), utilizza:

git merge [branch]

In entrambi i casi git prova ad auto-incorporare le modifiche. Sfortunatamente, a volte questa procedura automatizzata non è possibile potrebbero crearsi dei conflitti. Dovrai risolvere manualmente questi conflitti manualmente, modificando i file che git mostrerà.
Dopo aver cambiato questi files, dovrai marcarli come ‘correttamente incorporati’ tramite:

git add [nomedelfile]

Nb: prima di immettere le modifiche, potrai anche visualizzarne un’anteprima eseguendo:

git diff [branch_sorgente]

Tags
È raccomandato creare dei tags nel caso in cui il software venga rilasciato. Questo è un concept già conosciuto, che esiste anche in SVN. Puoi creare un tag chiamato 1.0.0 eseguendo:

git tag 1.0.0 1b2e1d63ff

La sequenza 1b2e1d63ff sta per i primi 10 caratteri del commit che si vuol referenziare tramite questo tag. Puoi ottenere l’id del commit tramite:

git log

Puoi anche utilizzare meno caratteri per l’id del commit, basta che sia unico.

Sostituire i cambiamenti locali

Nel caso tu abbia fatto qualcosa di sbagliato, puoi sostituire i cambiamenti fatti in locale con il comando:

git checkout -- [nomedelfile]

Questo rimpiazza le modifiche nell’albero di lavoro con l’ultimo contenuto presente in HEAD. I cambiamenti fatti ed aggiunti all’index, così come i nuovi files, verranno mantenuti.

Se vuoi in alternativa eliminare tutti i cambiamenti e commits fatti in locale, recupera l’ultima versione dal server e fai puntare il tuo master branch a quella versione in questo modo:

git fetch origin
git reset --hard origin/master

Suggerimenti utili

GUI (Interfaccia utente grafica) per Git disponibile di default:

gitk

Colora gli output di Git:

git config color.ui true

Mostra il log in una riga per commit:

git config format.pretty oneline

Utilizza l’aggiunta interattiva:

git add –i

Occhio alle password!

Lo storico del repository è accessibile a tutti gli sviluppatori che lo usano o è addirittura pubblico in alcuni casi (caricato su GitHub, ad esempio), è quindi sempre sconsigliabile far sì che Git non tracci file di configurazione che contengano password ed altre credenziali.

È possibile istruire Git affinché non tracci questi file creando un file .gitignore nella directory principale del repository o in una sua sottodirectory con dentro elencati i file da ignorare, ad esempio:

  • Vogliamo far sì che Git non tenga traccia del file config/config.php
  • Creiamo nella directory principale in file chiamato .gitignore che contenga:
config/config.php
  • Ed aggiungiamo il file .gitignore al repository:
git add .gitignore

In questo modo il file verrà ignorato e non sarà nemmeno possibile aggiungerlo accidentalmente col comando git add.

Links e risorse

Clients grafici

GitX (L) (OSX, open source) 

Tower (OSX)

Source Tree (OSX, free)

GitHub per Mac (OSX, free) 

GitBox (OSX)

Le guide

Git Community Book

Pro Git

Think like a git

GitHub Help

Image credits

Git-tower.com