Categorie
GNU/Linux

Git come iniziare

git

Git è uno dei più famosi tool di controllo, insieme a CVS Mercurial. Questo programma permette di creare un repository con il proprio codice sorgente e condividerlo con altri utenti tramite hub come GitHub. Ma cosa significa condividerlo con esattezza? Con condivisione intendiamo che è possibile permettere a chiunque di leggere il nostro codice e fargli apportare delle modifiche in maniera collaborativa, senza creare conflitti e potendo sempre tornare sui propri passi, nel caso una di queste modifiche non rientrasse nei nostri piani. Permettere a più persone di lavorare su uno stesso file, però introduce notevoli problemi, come il controllo di revisione, i conflitti e molti altri aspetti. Git è sotto questo aspetto decisamente potente e permette di affrontare questi problemi con naturalezza, senza doversi sorbire grossi manuali. Rispetto a CVS, Git è un tool decentralizzato, questo significa che è possibile creare/lavorare su un repository senza essere collegati online. In pratica si può lavorare tranquillamente offline su un’isola deserta per poi collegarsi al branch principale per caricare le proprie modifiche. Decisamente comodo.

Iniziare Per creare il primo repository, si dovrà inizialmente configurare Git fornendogli alcuni dati personali:

git config --global user.name "vostro nome"
git config --global user.email "vostra email"

Ci si sposta poi nella cartella in cui si vuole creare il primo progetto e si digita il comando:

git init

In questo modo verrà creata una cartella .git in cui si terrà traccia di tutte le nostre modifiche apportate, la configurazione e molto altro. Particolare importanza riveste .git/index che contiene gli indici del nostro progetto e .git/objects per gli oggetti del database. Per aggiungere un file al nostro progetto basta scrivere:

git add nome-del-file

In questo modo verranno aggiunti i file al progetto in una zona temporanea, prima della loro effettiva inclusione che avverrà con il comando commit.

Per ottenere informazioni sullo stato del nostro progetto risultano utili questi tre comandi per visualizzare gli aggiornamenti, i messaggi o i codici identificativi dei vari commit:

git status
git log
git show

Tramite il commit si rendono effettive le modifiche apportate, inglobandole nel progetto:

git commit -m 'primo commit'

il parametro -m ‘descrizione’ aggiunge un messaggio (obbligatorio) al commit. È interessante notare come ogni commit sia identificato da un numero ID sempre diverso: infatti digitando git log si vedranno in sequenza tutti i commit effettuati, i messaggi descritti e i relativi ID identificativi. Questi numeri ID sono importanti perché in ogni momento è possibile ritornare sui propri passi, annullando le modifiche apportate con un precedente commit (se per qualche motivo le modifiche apportate da una terza persona si rivelassero in futuro errate o non di nostro gradimento). Aggiungiamo ora un nuovo file con il comando git add nome-del-file ed effettuiamo un nuovo commit (che avrà un nuovo ID). Sará possibile tornare sui propri passi (come avere una macchina del tempo in pratica) ed eliminare l’aggiunta di questo file semplicemente digitando:

git checkout id-del-commit-precedente

In questo modo si tornerà indietro nel tempo, grazie al fatto che Git memorizza ogni nostra modifica al progetto, tenenendone costantemente traccia.

Un nuovo ramo Una volta che il proprio progetto assume una connotazione stabile, diciamo quasi definitiva, è possibile spostarsi dal ramo stabile definito solitamente master per crearne uno sperimentale per esempio chiamato experimental. Per fare questo si utilizza un semplice comando:

git branch nome-del-ramo-secondario

Si viene così a creare un nuovo ramo (branch) del progetto su cui è possibile apportare nuove e profonde modifiche, senza inficiare la stabilità del progetto originale (master). La potenza di questo diversificazione sta nel fatto che in ogni momento è possibile fondere le migliorie apportate nel nuovo ramo sperimentale con quello stabile, in maniera semplice ed efficiente.

git checkout nome-del-ramo-secondario
git add nome-di-un-altro-file
git commit -a -m 'modifiche apportate al secondo ramo'
git checkout master
git merge ramo-secondario

Con questi comandi ci si è spostati sul ramo secondario (se non eravamo già li), abbiamo aggiunto un file ed effettuato il commit. Questa modifica non ha apportato nessuna variazione nel progetto master (che non conterrà alcun nuovo file), ma solo nel ramo sperimentale. Se questo nuovo file ci piace e vogliamo in futuro renderlo effettivo anche nel ramo master, basterà spostarsi sul ramo master ed effettuare il merge (fusione) come indicato nell’ultimo comando.

E i conflitti? Quando su due diversi rami vi sono file, per esempio con lo stesso nome ma con contenuti differenti, possono insorgere dei fastidiosi conflitti. In questo caso si sarà chiamati in causa per decidere quale file sia degno di far parte del progetto e quale debba essere invece scartato. Se nel nostro caso avessimo due file con lo stesso nome leggimi.txt ma con un contenuto differente, si dovrà prima di tutto comprendere quale inglobare nel progetto (ipotizziamo nel nostro caso sia quello del ramo secondario)

git checkout nome-del-ramo-secondario leggimi.txt
git commit -m 'fusione esente da conflitti'

Effettueremo perciò solo il checkout della versione presente nel ramo secondario del nostro file leggimi.txt. Quello appena affrontato è un caso molto elementare di conflitto, ma nei casi più complessi è necessario utilizzare delle strategie articolate.

Git e GitHub GitHub è uno dei servizi più utilizzati per creare dei repository dei propri progetti. Per utilizzarlo (una volta creato un account ovviamente) con Git da linea di comando è necessario inizialmente configurarlo:

git remote add origin https://github.com/nome-utente/nome-repository

Con git remote si aggiunge un indirizzo remoto definito dall’alias origin. In questo modo dando il seguente comando si “spingerà” il risultato del proprio commit verso il ramo master di origin (identificato dal nostro account su GitHub).

git push -u origin master

Risorse utili
* GitHub guida
* Git la guida tascabile
* Pro Git
* Git Wikipedia
* Ottima alternativa a GiHub (Bitbucket)

1 risposta su “Git come iniziare”

“In pratica si può lavorare tranquillamente offline su un’isola deserta per poi collegarsi al branch principale per caricare le proprie modifiche. Decisamente comodo.”

Non vedo l’ora di lavorare offline sulla mia isola deserta per poi collegarmi comodamente per caricare le modifiche!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *