guide

Regras de ignorar só suas com .git/info/exclude

Como escrever em .git/info/exclude regras pessoais de um único repositório sem mexer no .gitignore, quando isso é útil e qual a precedência.

O .gitignore é commitado e compartilhado com todos. Às vezes, porém, há arquivos que só você quer ignorar neste repositório: anotações pessoais, scripts de experimento, pastas criadas pelos plugins do seu editor. Para isso existe o .git/info/exclude.

Onde fica

Ao executar git init ou git clone, o arquivo .git/info/exclude é criado automaticamente. É um arquivo vazio, com apenas algumas linhas de comentário.

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

Como fica dentro do diretório .git, ele não é commitado nem enviado a ninguém no push. A sintaxe é exatamente a mesma do .gitignore. Para descobrir o local exato, inclusive quando você usa várias worktrees, rode git rev-parse --git-path info/exclude.

Quando usar

SituaçãoExemplosLocal recomendado
Arquivos pessoais usados só neste repositórionotes.md, scratch/, todo.txt.git/info/exclude
Arquivos pessoais comuns a todos os repositórios.DS_Store, *.swpgitignore global
Regras necessárias para todo o timenode_modules/, dist/, .env.gitignore

É especialmente útil ao contribuir com o repositório de outras pessoas. Se você alterar o .gitignore do projeto para bloquear arquivos criados pelas suas ferramentas, os revisores podem não querer essa mudança. Escrevendo em .git/info/exclude, o histórico de commits fica intacto.

echo 'scratch/' >> .git/info/exclude
echo '.my-plugin-cache/' >> .git/info/exclude
git status   # não aparecem mais

Precedência

Entre as fontes de regras, .git/info/exclude fica abaixo do .gitignore e acima do arquivo global.

  1. Padrões da linha de comando
  2. .gitignore (arquivos de subdiretórios sobrepõem os de cima)
  3. .git/info/exclude
  4. core.excludesFile

Por isso não é possível reincluir, com uma regra ! em .git/info/exclude, um arquivo que o .gitignore ignora. Conferindo na prática:

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

Cuidados

Referências

← AnteriorComo configurar um gitignore global (core.excludesFile)