guide

Des règles d'exclusion personnelles avec .git/info/exclude

Comment écrire dans .git/info/exclude des règles personnelles propres à un seul dépôt sans modifier le .gitignore, dans quels cas c'est utile et quelle est sa priorité.

Le .gitignore est commité et partagé avec tout le monde. Il arrive pourtant que vous vouliez ignorer des fichiers seulement pour vous et seulement dans ce dépôt : notes personnelles, scripts d'essai, dossiers créés par les extensions de votre éditeur. C'est à cela que sert .git/info/exclude.

Où se trouve-t-il

git init ou git clone crée automatiquement le fichier .git/info/exclude. C'est un fichier vide qui ne contient que quelques lignes de commentaire.

cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# ...

Comme il se trouve dans le répertoire .git, il n'est pas commité et n'est transmis à personne lors d'un push. Sa syntaxe est exactement celle du .gitignore. Pour connaître son emplacement exact, y compris avec plusieurs worktrees, utilisez git rev-parse --git-path info/exclude.

Quand l'utiliser

SituationExemplesEmplacement conseillé
Fichiers personnels utilisés seulement dans ce dépôtnotes.md, scratch/, todo.txt.git/info/exclude
Fichiers personnels communs à tous les dépôts.DS_Store, *.swpgitignore global
Règles nécessaires à toute l'équipenode_modules/, dist/, .env.gitignore

C'est particulièrement utile quand vous contribuez au dépôt de quelqu'un d'autre. Si vous modifiez le .gitignore du projet pour bloquer les fichiers créés par vos outils, les relecteurs risquent de refuser ce changement. En écrivant dans .git/info/exclude, vous ne touchez pas à l'historique des commits.

echo 'scratch/' >> .git/info/exclude
echo '.my-plugin-cache/' >> .git/info/exclude
git status   # ils n'apparaissent plus

Priorité

Parmi les sources de règles, .git/info/exclude est en dessous du .gitignore et au-dessus du fichier global.

  1. Motifs de la ligne de commande
  2. .gitignore (les fichiers des sous-répertoires priment sur ceux du dessus)
  3. .git/info/exclude
  4. core.excludesFile

On ne peut donc pas réinclure, avec une règle ! dans .git/info/exclude, un fichier que le .gitignore ignore. Vérification :

# .gitignore        : x
# .git/info/exclude : !x
$ git check-ignore -v x
.gitignore:1:x	x

Points d'attention

Références

← PrécédentConfigurer un gitignore global (core.excludesFile)