Skip to content
Sintaxe6 min de leituraVerificado no Git 2.40+

Guia de sintaxe e regras de padrões do .gitignore

Análise técnica detalhada da formatação de regras, caracteres curinga glob, barras no início e no final, regras de negação e a armadilha de pastas ignoradas.

1. Formatação básica: Comentários e linhas em branco

Cada linha em um arquivo .gitignore define um padrão de exclusão independente com três regras básicas:

  • Linhas em branco são ignoradas e servem como separadores visuais para organizar o documento.
  • Linhas iniciadas com # são comentários e não exercem efeito sobre o controle de versão.
  • Espaços no final da linha são ignorados, a menos que sejam escapados com barra invertida (\ ).
gitignore
# Ignore compiled Python bytecode
__pycache__/
*.py[cod]

# Ignore local secret configurations
.env
.env.local

2. Padrões curinga glob (*, ?, [ ])

O Git suporta os padrões tradicionais glob de shell em um único nível de pasta:

  • * (Asterisco): Corresponde a zero ou mais caracteres em um mesmo segmento. *.log casa com error.log, mas não com pasta/error.log.
  • ? (Ponto de interrogação): Corresponde a exatamente um caractere único. test?.js casa com test1.js, mas não com test12.js.
  • [abc] (Intervalo de caracteres): Corresponde a qualquer caractere contido entre os colchetes. *.[oa] casa com arquivos terminados em .o ou .a.

3. Barras no início, no final e intermediárias

A posição das barras (/) muda totalmente a forma como o Git avalia cada linha:

  • Barra final (logs/): Restringe a regra exclusivamente a pastas. Uma pasta logs/ será ignorada, mas um arquivo regular chamado logs não será ignorado.
  • Barra inicial (/config.json): Ancora a regra na raiz do repositório onde reside o arquivo .gitignore. Ignora /config.json, mas permite rastrear /sub/config.json.
  • Barra intermediária (docs/*.html): Ancora o padrão em relação à pasta onde está o arquivo .gitignore.

4. Asterisco duplo recursivo (**)

O asterisco duplo casa padrões através de múltiplos níveis de pastas aninhadas:

  • **/cache: Corresponde a qualquer pasta ou arquivo chamado cache em qualquer lugar do repositório (cache, src/cache, a/b/c/cache).
  • logs/**: Corresponde a todos os arquivos e subpastas dentro de logs/, em qualquer profundidade.
  • a/**/b: Corresponde a a/b, a/x/b, a/x/y/b e assim sucessivamente.

5. Negação (!) e a armadilha de pastas ignoradas

Um ponto de exclamação (!) no início nega uma regra anterior, orientando o Git a voltar a rastrear um arquivo.

A armadilha de diretórios (Por que !arquivo.txt não funciona)

Por motivos de performance, o Git ignora a leitura interna de uma pasta assim que ela é descartada. Se build/ for ignorado, o Git NUNCA voltará a incluir um arquivo interno através de !build/importante.txt.

Para incluir um arquivo específico dentro de uma pasta ignorada, você deve ignorar o conteúdo da pasta e não a pasta em si:

gitignore
# 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/

6. Depuração de regras com git check-ignore

Para checar exatamente qual regra do .gitignore está descartando ou deixando passar um arquivo, use o utilitário nativo com a opção -v:

bash
# Shows the exact .gitignore file and line number responsible
git check-ignore -v src/temp/debug.log

Perguntas Frequentes

Respostas práticas para dúvidas comuns de desenvolvedores sobre regras de .gitignore, cache e configuração de repositórios.

Qual a diferença entre * e ** no .gitignore?

O asterisco simples (*) casa caracteres em uma única pasta. O asterisco duplo (**) atua de forma recursiva através de múltiplas pastas aninhadas.

Por que !pasta/arquivo.txt falha se pasta/ foi ignorada?

O Git não analisa o conteúdo de pastas ignoradas. Para abrir uma exceção, ignore os itens internos com 'pasta/*' e então declare a negação.

Como descobrir qual regra está ignorando um arquivo?

Execute 'git check-ignore -v <caminho>'. O Git mostrará exatamente o arquivo .gitignore e o número da linha correspondente.

← Ler guiasAbrir no gerador completo