Tracciare un nuovo file

Il comando che dice a Git di tracciare un file e quindi seguirne le future modifiche è git add . Proviamo, nella cartella del nostro progetto ad aggiungere il file test.txt:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	test.txt
nothing added to commit but untracked files present (use "git add" to track)

Possiamo notare che lanciando il comando git status , Git si trova questo nuovo file nella directory che non esisteva in precedenza e che quindi risulta untracked. Significa anche che questo file non c’era nella commit precedente.

Diciamogli quindi di tracciarlo:

$ git add test.txt

Lanciando nuovamente git status, avremo in risposta:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   test.txt
#

Fatto. Da ora in poi il file test.txt è nell’area di stage ed è pronto per essere aggiunto alla commit. Naturalmente lanceremo questo comando quando avremo finito di lavorarci su, per non doverlo aggiungere nuovamente in seguito.

Modifica di file già tracciati

E se invece modifichiamo un file già tracciato? La situazione non cambia di molto. Proviamo a modificare il file index.php e lanciamo il comando git status :

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   test.txt
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   index.php
#

Lo status ci dice che index.php è in Changes not staged for commit, ovvero che l’abbiamo modificato, ma non lo abbiamo ancora spostato nell’area di stage. Per aggiungerlo, dobbiamo nuovamente usare il comando git add  come in precedenza e poi vediamo cosa succede con git status :

$ git add index.php
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
# 
#         new file:   test.txt
#         modified:   index.php

Adesso tutti e due i file sono nell’area di stage, pronti per far parte del prossimo commit. E se modificassimo uno dei due file a questo punto? Modifichiamo index.php. Ci troveremmo davanti una situazione del genere:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
# 
#         new file:   test.txt
#         modified:   index.php
# 
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
# 
#         modified:   index.php

index.php sarebbe sia dentro che fuori dallo stage. Come può essere? Semplice: non appena abbiamo digitato git add index.php , quella esatta versione del file (e solo quella!) è finita dentro lo stage. Non appena abbiamo modificato index.php, le versioni non corrispondono più. Per aggiungere le modifiche, quindi, devi usare nuovamente il comando git add . Così metterai quest’ultima versione di index.php nello stage.

$ git add index.php
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
# 
#         new file:   test.txt
#         modified:   index.php

Come vedi siamo tornati alla situazione precedenti, in cui tutti i file che abbiamo creato o modificato si trovano nello stage. Tutto è pronto per la commit!

Rimuovere file

Se nel tuo progetto c’è un file che non vuoi più tracciare, puoi usare il comando git rm  e poi eseguire il commit per salvare. Facciamo un esempio: il file prodotto.php non serve più al progetto:

$ git rm prodotto.php
$ rm prodotto.php
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
# 
#         deleted:    prodotto.php

Al prossimo commit, prodotto.php sparirà dai file del tuo repository.

Rimuovere un file già in stage

Se ti sei accorto che un file è già stato messo in stage ma non vuoi inserirlo nella commit successiva, puoi usare il comando git rm:

git rm --cached file_da_togliere_.txt

Ignorare dei file con .gitignore

Negli esempi precedenti abbiamo rimosso un file, sia dalla directory del progetto che dallo stage. Se volessimo invece mantenerlo e non tracciarlo.. semplicemente ignorarlo? Con Git è sufficiente creare un file chiamato .gitignore , da mettere nella tua directory di lavoro con la lista dei file da ignorare. Vediamo un esempio di contenuto di un file .gitignore :

.DS_Store
Thumbs.db
static/
tmp/
cache/
*.log

Questo file dice a Git di ignorare tutti i file che si chiamano .DS_Store  e Thumbs.db  (..sapete di cosa parlo), di ignorare le directory static , tmp  e cache  e i file di log generati automaticamente che hanno l’estensione .log . Ti consiglio di creare questo file prima di partire con lo sviluppo del progetto!