Guida alla sintassi e alle regole di .gitignore
Analisi tecnica dettagliata delle regole di formattazione, caratteri jolly glob, slash iniziali e finali, regole di negazione e la trappola delle cartelle ignorate.
Ogni riga di un file .gitignore rappresenta una regola indipendente retta da tre principi fondamentali:
- Le righe vuote vengono ignorate e fungono da separatori visivi per migliorare la leggibilità del file.
- Le righe che iniziano con # sono commenti e non producono alcun effetto sul controllo di versione.
- Gli spazi al termine della riga vengono ignorati a meno che non siano preceduti da un carattere di escape con barra rovesciata (\ ).
# Ignore compiled Python bytecode
__pycache__/
*.py[cod]
# Ignore local secret configurations
.env
.env.localGit supporta i pattern shell standard di globbing all'interno di un singolo livello di cartella:
- * (Asterisco): Corrisponde a zero o più caratteri in un singolo segmento. *.log corrisponde a error.log, ma non a cartella/error.log.
- ? (Punto interrogativo): Corrisponde esattamente a un singolo carattere. test?.js corrisponde a test1.js, ma non a test12.js.
- [abc] (Intervallo di caratteri): Corrisponde a qualsiasi carattere racchiuso tra parentesi quadre. *.[oa] corrisponde a file che terminano con .o o .a.
La posizione dello slash (/) modifica radicalmente la modalità con cui Git interpreta il percorso:
- Slash finale (logs/): Limita il pattern esclusivamente alle cartelle. Ignorerà una directory chiamata logs/, ma non un normale file denominato logs.
- Slash iniziale (/config.json): Ancora la corrispondenza alla radice del percorso in cui risiede il file .gitignore. Ignora /config.json ma continua a tracciare /sub/config.json.
- Slash intermedio (docs/*.html): Ancora il pattern come percorso relativo alla posizione del file .gitignore.
Il doppio asterisco consente di effettuare corrispondenze attraverso livelli arbitrari di cartelle nidificate:
- **/cache: Corrisponde a qualsiasi cartella o file denominato cache in qualunque punto del repository (cache, src/cache, a/b/c/cache).
- logs/**: Corrisponde a tutti i file e a tutte le sottocartelle all'interno di logs/, indipendentemente dalla profondità.
- a/**/b: Corrisponde ad a/b, a/x/b, a/x/y/b e così via.
Il punto esclamativo (!) nega una regola precedente, ordinando a Git di tornare a tracciare un file escluso.
Per motivi di efficienza, Git evita di scansionare il contenuto di una cartella una volta che questa è stata esclusa. Se build/ viene ignorata, Git non reincluderà MAI un file al suo interno tramite !build/importante.txt.
Per reincludere un file all'interno di una cartella ignorata, devi escludere il contenuto della cartella anziché la cartella stessa:
# INCORRECT: Will NOT work because parent directory is skipped
node_modules/
!node_modules/my-local-package
# CORRECT: Ignore contents of directory, then whitelist the specific target
node_modules/*
!node_modules/my-local-package/Quando desideri verificare quale riga esatta sta ignorando o consentendo un file, esegui il comando diagnostico di Git con il flag -v:
# Shows the exact .gitignore file and line number responsible
git check-ignore -v src/temp/debug.logDomande Frequenti
Risposte pratiche alle domande più comuni degli sviluppatori su regole .gitignore, cache e configurazione dei repository.
Qual è la differenza tra * e ** in .gitignore?
L'asterisco singolo (*) corrisponde a caratteri all'interno di un singolo livello di cartella. Il doppio asterisco (**) agisce ricorsivamente su più livelli di directory.
Perché !cartella/file.txt non funziona se cartella/ è ignorata?
Git non analizza l'interno delle cartelle ignorate. Ignora il contenuto con 'cartella/*' e poi dichiara l'eccezione.
Come individuare quale regola esclude un determinato file?
Esegui 'git check-ignore -v <percorso>'. Git restituirà il file .gitignore e la riga esatta responsabile dell'esclusione.
Guide e Riferimenti di .gitignore
Come ignorare file già tracciati in Git
La soluzione definitiva a un problema classico: rimuovere dall'indice file sensibili o generati che erano stati committati per errore prima del .gitignore.
Come ignorare una cartella in Git
Istruzioni chiare per escludere cartelle: significato dello slash terminale, percorsi relativi alla root, sottocartelle e cartelle vuote.
Esempi di .gitignore per stack moderni
Esempi pratici e curati per i linguaggi più diffusi, framework backend, sviluppo di videogiochi, app mobili e container Docker.