.gitignore : i file ignored in Git


Lezione 21 / 53

.gitignore : i file ignored in Git

Di Luca Ferretti


git guida git guida git italiano

Abbiamo visto in precedenza che Git considera i file presenti nella working copy distinguendoli in tracked (file che sono stati committati nel repository o inclusi nella staging area) e untracked (l’opposto del precedente).

A questi due gruppi possiamo aggiungerne un terzo, i file ignored, ossia i file per i quali Git è stato espressamente istruito di escluderli dal controllo di versione.

I file ignored sono tipicamente artefatti di build o altri file generati che possono essere ricreati a partire dai sorgenti del repository, oppure file che contengono contenuti che non devono essere inclusi nei commit per altri motivi (per esempio password, chiavi di autenticazione o altri secret).

Per indicare quali file ignorare viene utilizzato il file speciale .gitignore, solitamente presente nella directory iniziale del progetto. È comunque possibile salvare un file .gitignore in ogni sottodirectory, che integra o sostituisce le regole del file “genitore” in quella directory e nelle sue “figlie”.

Non esiste un comando specifico di Git, quindi sarà necessario modificare il contenuto di tale file con un editor di testo. Ovviamente, è opportuno aggiungere e committare il file .gitignore nel repository, in modo che ne sia parte integrante.

Il contenuto esatto del file .gitignore dipende dalla natura del progetto. Esistono raccolte di template  con file specifici in base al linguaggio di programmazione e al framework utilizzato. Per esempio, un template per un progetto in linguaggio PHP con framework Laravel è:

/vendor/
node_modules/
npm-debug.log
yarn-error.log

# Laravel 4 specific
bootstrap/compiled.php
app/storage/

# Laravel 5 & Lumen specific
public/storage
public/hot

# Laravel 5 & Lumen specific with changed public path
public_html/storage
public_html/hot

storage/*.key
.env
Homestead.yaml
Homestead.json
/.vagrant
.phpunit.result.cache


Le righe che iniziano con # sono commenti.
Per quanto riguarda le altre, su ciascuna riga è indicato un pattern da ignorare (o il percorso esatto di un file).

In base al pattern indicato, verranno ignorati specifici file nella directory, ad esempio:

  • /logs - ignora il file o directory logs nella directory corrente (quindi /logs ma non /example/logs
  • logs - ignora i file e le directory con nome logs nella directory corrente e nelle sottodirectory (quindi /logs, /example/logs, /debug/logs/debug.log, ma non /build/log/today
  • logs/ - ignora solo le directory con nome logs (quindi la directory /build/logs e tutti i file contenuti ma non il file debug/logs)

È anche possibile indicare quali file non ignorare se un altro pattern dovesse indicare il contrario tramite un !. Ad esempio

# ignora tutti i file con estensione .log
*.log
# NON ignorare i "debug.log"
!debug.log

È buona pratica creare un file .gitignore globale che vale per tutti i repository Git presenti sulla propria macchina. In tale file possono essere indicati i pattern che vanno ignorati in ogni progetto, per esempio i file creati dal proprio sistema operativo (come .DS_Store and thumbs.db) o le directory create dal proprio IDE/Editor.

touch ~/.gitignore
git config --global core.excludesFile ~/.gitignore

Con questi comandi creiamo un file .gitignore nella propria directory home e istruiamo Git a usarlo come file di ignore globale.

È possibile aggiungere ai file ignorati un file che è stato in passato aggiunto al repository, tramite i seguenti comandi:

$ echo debug.log >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git commit -m "rimosso debug.log dal repository"

Attenzione però: in tutti i commit precedenti il file resterà ovviamente disponibile (Git conserva la history).

Guida Git in italiano 1 Che cos'è Git? 2 Nascita di Git 3 Principali caratteristiche di Git 4 Riga di comando e UI in Git 5 Come Installare Git 6 5 comandi Git per sviluppatori singoli 7 5 comandi Git per sviluppare collaborando 8 Repository in Git 9 Commit in Git 10 Working Copy in Git 11 Staging Area in Git 12 Branch in Git 13 Remote in Git 14 Inizializzare un nuovo repository con git init 15 Creare una copia di un repository remoto in Git con git clone 16 Configurare le opzioni di Git con git config 17 Il comando Git add in Git 18 Il comando Git commit in Git 19 Il comando Git diff in Git 20 Il comando Git stash in Git 21 .gitignore : i file ignored in Git 22 Il comando Git status in Git 23 il comando Git log in Git 24 Il comando Git tag in Git 25 Il comando Git blame in Git 26 Il comando Git checkout in Git 27 Il comando Git revert in Git 28 Il comando Git reset in Git 29 Il comando Git rm in Git 30 L'opzione Git commit –amend in Git 31 Git rebase –interactive in Git 32 Scorciatoie per comandi frequenti in Git 33 Repository condiviso in Git 34 Il modello Fork & pull 35 Il comando Git remote in Git 36 I principali repository remote di Git: Github, Gitlab e Bitbucket 37 Il comando Git fetch in Git 38 Il comando Git push in Git 39 Il comando Git pull in Git 40 Il comando Git branch in Git 41 Il comando Git checkout in Git 42 Il comando Git merge in Git 43 Risolvere un merge conflict in Git 44 Capire meglio il contenuto dei commit durante un conflitto di merge in Git 45 Workflow Git centralizzato 46 Workflow Git feature branching 47 Workflow Git trunk-based 48 Approccio “forking” in Git 49 Gitflow in Git 50 Messaggi di commit in Git 51 Tagging & Versioning in Git 52 L’opzione merge in Git 53 L’opzione rebase in Git
Scopri i corsi

Le nostre guide possono essere molto utili per muovere i primi passi nel mondo della programmazione, ma se vuoi iniziare una nuova carriera in ambito digital & tech con il supporto costante dei docenti e tantissime esercitazioni pratiche, ti consigliamo di frequentare uno dei corsi della nostra Hackademy!

Scopri i corsi