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!