Nel primo articolo, abbiamo introdotto e mostrato come installare git, in questo nuovo articolo mostreremo come gestire un progetto con git e quali sono i principali comandi.
Esistono due modi per gestire un progetto con git, il primo è quello di inizializzare un nuovo archivio git in una directory esistente, il secondo consiste nel clonare un progetto git esistente da un server o da un altro repository.
Gestire un nuovo progetto con git
Supponiamo di avere una cartella, di nome primo-progetto, contenente i file del nostro progetto e di voler gestire le versioni dei file durante tutto il percorso di sviluppo. La prima cosa che occorre fare è posizionarsi all’interno della cartella e inizializzare un repository git mediante il comando seguente:
git init
Dopo aver confermato il comando, verrà creata, all’interno della cartella primo-progetto, una cartella con nome .git destinata a contenere tutti i file del repository necessari al controllo delle versioni.
Dopo l’inizializzazione dell’archivio, nessun file è stato ancora tracciato, per iniziare il tracciamento occorre marcare i file che si vogliono aggiungere al repository e poi confermare la loro registrazione. I comandi per adempiere a quanto appena detto sono i seguenti:
git add .
git commit -m "descrizione delle modifiche"
Il primo comando marca tutti i file perché vengano aggiunti, con il successivo commit, al repository. Il punto sta ad indicare che vanno aggiunti tutti i file e directory presenti all’interno della cartella primo-progetto; se avessi voluto marcare solo specifici file, avrei potuto elencarli, ad esempio git add *.c indica di marcare solo i file con estensione .c. Mediante il comando add i file coinvolti vengono aggiunti alla staging area per il successivo commit.
Il secondo comando, commit, aggiunge tutti i file presenti nella staging area al repository git. L’opzione -m, del comando, sta per messaggio ed il testo che la segue, tra virgolette, rappresenta una descrizione dello stato attuale del progetto, in modo che in futuro, quando le istantanee/snapshot saranno tante, l’utente abbia una qualche informazione sullo stato del progetto all’atto del commit.
Clonare un repository esistente
Se si desidera contribuire ad un progetto o semplicemente fare una copia di un progetto da un’altra parte, il comando da usare è git clone, la sintassi per clonare un progetto è la seguente:
git clone [url del progetto]
es.
git clone https://github.com/fchiriaco/upload-file-jquery.git
Questo comando crea la cartella upload-file-jquery nel proprio computer e inizializza al suo interno la cartella .git, tutti i file del progetto vengono copiati nella nuova cartella. A questo punto si può iniziare a lavorare ed apportare il proprio contributo al progetto. Qualora si volesse utilizzare un altro nome per la cartella di destinazione, questo andrebbe specificato come secondo parametro del comando:
git clone https://github.com/fchiriaco/upload-file-jquery.git nome-cartella-dest
Un’altra precisazione che va fatta è che git clone può essere fatto non solo utilizzando il protocollo https, ma anche altri, come ad esempio ssh, la copia precedente poteva anche essere fatta così:
git clone git@github.com:nomeutente/upload-file-jquery.git
Usiamo git per gestire le versioni del nostro progetto
Supponiamo di trovarci all’interno della cartella che conterrà il nostro progetto e di voler utilizzare git per gestire le varie versioni che riterremo opportuno salvare.
La prima cosa, come già abbiamo visto sopra, è quella di inizializzare il nostro repository con il comando
git init
interroghiamo ora git sullo stato dei file del progetto, il comando per farlo è
git status
git risponderà segnalando che ci sono file modificati e non tracciati.
Provvediamo quindi ad aggiungere alla staging area i file del progetto mediante il comando
git add .
digitiamo di nuovo git status
e git ci segnalerà che ci sono dei file in attesa di commit.
A questo punto provvediamo al nostro primo commit, che creerà la prima istantanea dei file del nostro progetto, ecco il comando
git commit -m "Primo commit progetto di esempio"
Se ora chiedo ancora informazioni sullo stato, git risponderà che non ci sono operazioni pendenti e che tutti i file sono allineati con il nostro repository.
Escludere file dal tracciamento .gitignore
Tra i file del nostro progetto ce ne potrebbero essere alcuni che non vogliamo tracciare e di cui non ci interessa tenere traccia delle modifiche. In questo caso è di supporto creare nella working directory un file con nome .gitignore e al suo interno elencare, anche con l’ausilio di caratteri jolly ed espressioni regolari, tutti i file che git deve ignorare e non deve includere nel repository.
Un esempio di file .gitignore potrebbe essere il seguente:
#file esclusi dal tracciamento
#ignora i file con estenzione .obj
*.obj
#ignora i file con estenzione .txt
*.txt
#ignora i file con estenzione .pdf della cartella doc
doc/*.pdf
#ignora il file lista.doc della cartella appunti
appunti/lista.doc
Comando git diff
Un altro comando git molto utile è git diff
che mostra le differenze tra il contenuto dei file presenti nella working directory ed il contenuto del repository. Se invece vogliamo vedere le differenze tra ciò che è presente nella staging area e che sarà oggetto del prossimo commit, allora occorre digitare il comando git diff --staged
Tutto con un unico comando
Un utile comando scorciatoia che mi permette di fare entrambe le operazioni insieme, aggiunta alla staging area e commit, è git commit -a -m "secondo commit"
, nota bene…questo comando funziona solo se i file modificati sono già presenti nel repository, non funziona con i file di nuova creazione.
Rimmozione e spostamento di file
Per rimuovere un file da git occorre prima rimuoverlo dai file già tracciati e poi fare un nuovo commit:
git rm nomefile
git commit -m "Cancellato dal progetto nomefile"
Un comando anologo viene usato per rinominare o spostare in altra directory un file
git mv nomefile nuovonomefile
git commit -m "Rinominato nomefile in nuovonomefile"
Elenco commit
Come ultimo comando citiamo quello che ci permette di vedere l’elenco di tutti i commit fatti e del codice HASH associato a ciascun commit.
git log
avremo in risposta un elenco simile a questo
Author: Francesco Chiriaco <nome@indirizzomail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Author: Francesco Chiriaco <nome@indirizzomail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
Author: Francesco Chiriaco <nome@indirizzomail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
Primo commit
Come si vede, ad ogni commit è associata una chiave hash che verrà utilizzata come riferimento per un futuro checkout nella working directory (richiamare quella versione specifica nella nostra cartella di lavoro) o per altre operazioni su quello specifico commit. L’elenco prodotto dal comando log mostra anche l’autore del commit, la data e la descrizione associata.