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.
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 (\ ).
# Ignore compiled Python bytecode
__pycache__/
*.py[cod]
# Ignore local secret configurations
.env
.env.localO 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.
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.
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.
Um ponto de exclamação (!) no início nega uma regra anterior, orientando o Git a voltar a rastrear um arquivo.
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:
# 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/Para checar exatamente qual regra do .gitignore está descartando ou deixando passar um arquivo, use o utilitário nativo com a opção -v:
# Shows the exact .gitignore file and line number responsible
git check-ignore -v src/temp/debug.logPerguntas 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.
Guias e Referências de .gitignore
Como ignorar arquivos já rastreados no Git
A solução para o problema frequente no Git: desindexar arquivos sensíveis ou gerados que foram comitados por engano antes do .gitignore.
Como ignorar um diretório no Git
Explicação clara das regras para pastas: semântica da barra final, caminhos relativos à raiz, subpastas e manutenção de pastas vazias.
Exemplos de .gitignore para stacks modernas
Modelos práticos e selecionados de .gitignore para linguagens populares, frameworks de backend, desenvolvimento de jogos e contêineres.