Da Anonimo (non verificato) , 29 Aprile 2026

Introduzione

Un file .gitignore elenca i pattern che Git deve trattare come untracked e non offrire mai di aggiungere. Mantiene fuori dal repository artefatti di build, segreti, metadati del sistema operativo e file temporanei dell'editor.

Sintassi dei pattern

  • name: corrisponde a file o directory chiamati name a qualsiasi profondità.
  • /name: corrisponde solo alla radice del repository.
  • name/: corrisponde solo alle directory.
  • *.log: glob; corrisponde a qualsiasi file .log.
  • **/build: corrisponde a build a qualsiasi profondità.
  • !important.log: ri-includi un path precedentemente ignorato.
  • # all'inizio di una riga è un commento.

Un esempio realistico

# .gitignore
# Output di build
/dist/
/build/
*.o
*.pyc

# Dipendenze
/node_modules/
/vendor/

# Editor
.idea/
.vscode/
*.swp

# OS
.DS_Store
Thumbs.db

# Segreti
.env
*.pem

Più file .gitignore

Puoi mettere un .gitignore a qualsiasi livello. I pattern sono relativi alla directory del file, e i file più profondi sovrascrivono quelli più superficiali. C'è anche un file di ignore globale per le tue preferenze personali:

git config --global core.excludesFile ~/.gitignore_global

Usalo per file di swap dell'editor e spazzatura del sistema operativo, non per path specifici di progetto.

Tracciare file già tracciati

Aggiungere un path a .gitignore non lo rimuove dal repository. Smetti di tracciare un file mantenendolo su disco:

git rm --cached secrets.env
git commit -m "Stop tracking secrets.env"

Debug degli ignore

Perché Git sta ignorando (o non ignorando) un path? Chiedi:

git check-ignore -v path/to/file

L'output nomina il file e la riga che hanno fatto match.

Ordine di valutazione

Git valuta le regole di ignore da diverse fonti, in questo ordine: argomenti della riga di comando, poi file .gitignore per directory (dal più profondo), poi $GIT_DIR/info/exclude, infine il core.excludesFile globale. Le regole successive (più specifiche) sovrascrivono quelle precedenti, e una negazione (!pattern) re-include un path solo se la sua directory padre non è essa stessa esclusa. Questa ultima regola inciampa molti utenti:

# Sbagliato: non si può un-ignore un file in una directory ignorata
/build/
!/build/keep.log

# Giusto: ignora i contenuti ma mantieni la directory dentro
/build/*
!/build/keep.log

Per repository e exclude globali

Due meccanismi extra di ignore complementano .gitignore. Il file untracked per repository .git/info/exclude si applica solo al tuo clone (buono per file IDE che non vuoi committare in .gitignore per tutto il team). Il core.excludesFile globale si applica a tutti i tuoi repo:

echo ".idea/" >> .git/info/exclude
git config --global core.excludesFile ~/.gitignore_global
echo ".DS_Store" >> ~/.gitignore_global

Usali per preferenze personali; riserva il .gitignore committato per le regole valide per tutto il team.

Errori comuni

Aggiungere secrets.env a .gitignore dopo che è già stato committato e assumere che il segreto sia sparito. È ancora nella storia; ruota il segreto e considera di usare git filter-repo per cancellarlo. Un'altra trappola: ignorare una directory con build quando intendevi /build, sopprimendo accidentalmente un file chiamato build in profondità nell'albero. Infine, committare .gitignore stesso è essenziale; senza di esso, ogni collaboratore deve inventare le proprie regole di ignore. .gitignore appartiene al repository, non fuori.