Pourquoi est-ce ignoré ? Déboguer avec git check-ignore
Comment trouver avec git check-ignore -v, git status --ignored et git ls-files quelle règle ignore un fichier, et vérifier sept causes fréquentes de règles qui ne fonctionnent pas.
Quand les règles s'accumulent, on se demande « pourquoi ce fichier n'apparaît-il pas ? » ou « pourquoi apparaît-il encore ? ». git dispose de commandes qui répondent à ces questions.
git check-ignore -v
git check-ignore -v logs/app.log src/build/keep.txt
La sortie a le format source:ligne:motif<TAB>chemin.
.gitignore:3:*.log logs/app.log
- La source est le fichier qui contient la règle :
.gitignore,sub/.gitignore,.git/info/excludeou le chemin du fichier global. - Le numéro de ligne et le motif indiquent exactement de quelle ligne il s'agit.
- Si rien ne s'affiche, le chemin n'est pas ignoré.
- Avec
-v, les cas réinclus par!apparaissent aussi avec leur règle de négation, par exemple.gitignore:4:!keep.log keep.log. - Pour un fichier dont le répertoire parent est exclu, c'est la règle de ce répertoire qui s'affiche. Par exemple, si la cause est la règle
logs/, la sortie est.gitignore:1:logs/ logs/keep.txt.
Pour voir aussi les chemins sans correspondance, ajoutez --non-matching (-n).
Fichiers suivis : --no-index
Les règles d'exclusion ne s'appliquant pas aux fichiers déjà suivis, check-ignore n'affiche rien pour eux par défaut. Pour savoir simplement si une règle correspond au fichier, ajoutez --no-index.
$ git check-ignore -v app.log # suivi, aucune sortie
$ git check-ignore -v --no-index app.log
.gitignore:3:*.log app.log
Lister les fichiers ignorés
# affiche les éléments ignorés avec l'état (marque !!)
git status --ignored --short
# liste tous les fichiers ignorés, un par un
git ls-files --others --ignored --exclude-standard
# fichiers suivis qui correspondent aux règles d'exclusion
git ls-files -ci --exclude-standard
Quand un répertoire entier est ignoré, git status --ignored l'affiche comme un seul élément, par exemple !! logs/. Pour voir fichier par fichier, utilisez ls-files.
Causes fréquentes de règles qui ne fonctionnent pas
- Le fichier est déjà suivi. C'est la plus courante. Si
git ls-files <chemin>affiche quelque chose, il est suivi. Arrêtez le suivi avecgit rm --cached. - Le répertoire parent est exclu. Avec
dir/ignoré,!dir/filen'a aucun effet. Remplacez pardir/*. - L'ordre est inversé. Si une règle plus large revient après la négation, c'est elle qui l'emporte. Le numéro de ligne de
check-ignore -vle montre immédiatement. - Espaces finaux. L'espace à la fin de
*.logest supprimé, mais les espaces avant le motif et les caractères invisibles comme l'espace pleine chasse restent dans le motif. - Sens de la barre oblique. gitignore n'utilise que
/comme séparateur, même sous Windows. Dansbuild\output, la barre oblique inverse est lue comme un échappement et la règle ne fait pas ce qui est attendu. - Méprise sur l'ancrage.
config/local.jsoncontient une barre au milieu et ne correspond donc qu'auconfigde la racine. Pour toute profondeur, utilisez**/config/local.json. - Casse. Là où
core.ignorecasevautfalse(généralement Linux),*.JPGet*.jpgsont différents. Les dépôts créés sous macOS ou Windows ont souventtrue, ce qui peut faire fonctionner une règle en local mais pas en CI.
Vérifier d'abord dans le navigateur
Pour comparer les résultats en modifiant les règles avant de les appliquer au dépôt, l'onglet Test de motifs de ce site est pratique. Collez les règles et la liste de chemins : pour chaque chemin s'affichent le résultat, la règle décisive (avec numéro de ligne) et les cas ignorés à cause du répertoire parent. La liste de chemins peut être la sortie de git ls-files ou de find . -type f. Le verdict final, qui inclut les .gitignore des sous-répertoires et la configuration globale, se vérifie dans le dépôt avec git check-ignore -v.
Références
- Documentation officielle de git-check-ignore
- Documentation officielle de git-status : --ignored
- Documentation officielle de git-ls-files
- Vérifié le : 2026-09-23 (format de sortie contrôlé avec git 2.50.1)