Como ignorar todos os arquivos de uma pasta menos a pasta em git
Neste artigo você vai aprender a como ignorar todos os arquivos de uma pasta menos a pasta em git, utilizando o gitignore
Resumo direto (colocar logo depois da primeira linha do post, antes do "O que fazer então?"):
O Git não versiona pasta vazia porque o índice dele só lista arquivos
Pra manter a pasta e ignorar o conteúdo dela, o .gitignore fica assim:
folder/* !folder/.gitkeep
A primeira linha ignora tudo que está dentro da pasta, a segunda re-inclui o arquivo placeholder (o ! nega um padrão anterior)
Depois é só criar o arquivo folder/.gitkeep vazio e commitar
Dois detalhes que quebram tudo se você errar: use folder/* e não folder/ (a doc do Git diz que não dá pra re-incluir arquivo se o diretório pai foi excluído), e a linha com ! precisa vir DEPOIS da que ignora, porque a última regra que casa é a que vence
E o .gitkeep não é recurso oficial do Git, é só convenção: qualquer arquivo naquela pasta resolve o problema

Fala programador(a), beleza? Bora aprender mais sobre gitignore e git!
Primeiro é bom entendermos que uma pasta sem arquivos não pode ser commitada, então este provavelmente é o seu problema?
O que fazer então?
Simples! Podemos começar ignorando todos os arquivos da pasta
E depois colocar um arquivo dentro, e não ignorá-lo, criar uma regra para remover este arquivo do ignore
Um nome muito utilizado pela comunidade é o .gitkeep
Este arquivo serve apenas para manter pastas vazias dentro de um repositório, porém não é oficial do git, apenas um padrão criado pelos devs
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Dito isso, o seu gitignore deve ficar assim:
folder/* !folder/.gitkeep
A primeira regra exclui os demais arquivos da pasta do versionamento
E a segunda faz o gitkeep ser mantido na pasta, sendo possível enviá-la para o repositório 🙂
Conclusão
No artigo de hoje você aprendeu a como ignorar todos os arquivos de uma pasta menos a pasta em git
Utilizamos uma técnica chamada gitkeep, que consistem em criar este arquivo na pasta
E depois ignorar os demais com o gitignore
Confira nossos cursos gratuitos no Youtube, com vídeos todos os dias! Se inscreva e ative o sininho para receber as notificações e aprender mais ainda sobre desenvolvimento web!
Veja também nosso catálogo de cursos na Udemy, todos com exercícios e projetos práticos, nas mais diversas tecnologias. O link acima contém um cupom de desconto para os cursos!
Novo H2: "O que é o .gitkeep?"
O .gitkeep é um arquivo vazio que você cria dentro de uma pasta só pra ela existir no repositório
E aqui vem a parte que quase ninguém fala: ele NÃO é um recurso oficial do Git
É convenção da comunidade, o Git não dá nenhum significado especial pra esse nome de arquivo, ele só vê um arquivo qualquer ali dentro
O que importa é a LOCALIZAÇÃO do arquivo, não o nome dele
Ou seja: .keep, placeholder.txt ou qualquer outro nome funcionam exatamente igual
O .gitkeep só virou o mais reconhecido porque o povo adotou
Inclusive o Ruby on Rails usa o nome .keep pro mesmo propósito, e o gerador dele tem a opção –skip-keeps pra não criar esses arquivos
Então se você abrir um projeto e ver .keep no lugar de .gitkeep, relaxa, é a mesma ideia 🙂
Novo H2: "Por que folder/ não funciona e folder/* funciona?"
Essa é a pegadinha que faz todo mundo se ferrar
Se você escrever a regra como folder/ (com a barra no fim e sem o asterisco), a exceção do .gitkeep simplesmente NÃO vai valer
O porquê está na própria documentação do gitignore: não dá pra re-incluir um arquivo se um diretório pai dele foi excluído, porque o Git nem lista o conteúdo de diretórios excluídos, por questão de performance
Sacou a diferença? folder/ exclui o DIRETÓRIO, folder/* exclui o CONTEÚDO dele
Como o diretório continua sendo olhado, o !folder/.gitkeep tem chance de agir
E tem um segundo detalhe de ordem: dentro do mesmo nível de precedência, a última regra que casa com o caminho é a que decide
Então a linha com o ! precisa vir DEPOIS da linha que ignora, nunca antes
Troca a ordem e você volta pro problema original, sem entender o motivo
Novo H2: "Como conferir qual regra está ignorando o seu arquivo:"
Em vez de ficar chutando, dá pra perguntar pro próprio Git
O comando git check-ignore existe justamente pra depurar gitignore
Com a flag -v (ou –verbose) ele imprime o padrão que está excluindo cada caminho
git check-ignore -v folder/.gitkeep
A saída vem no formato <arquivo-fonte>:<número-da-linha>:<padrão> <caminho>
Algo como .gitignore:3:*.log debug.log
Ou seja, ele te entrega o arquivo, a LINHA e o padrão culpado, de bandeja
Tem também a opção –non-matching, que mostra caminhos que não casam com nenhum padrão, e ela só faz sentido junto com o –verbose
Novo H2: "Coloquei no .gitignore e o arquivo continua aparecendo:"
Calma, não é bug
O gitignore só age sobre arquivos que ainda NÃO são rastreados
Se o arquivo já está no índice, adicionar ele no .gitignore não faz o Git parar de rastrear
Pra resolver, você tira ele do índice e commita a mudança:
git rm –cached <arquivo>
A flag –cached é importante: ela mantém o arquivo no seu diretório de trabalho, só remove do controle de versão
Depois é só manter o padrão no .gitignore e commitar
Tome cuidado nessa hora, sem o –cached você apaga o arquivo de verdade
Novo H2: "Isso ainda vale hoje?"
Vale sim
A versão estável mais recente do Git é a 2.55, lançada em junho de 2026, e nenhuma release recente introduziu suporte nativo a diretórios vazios
O motivo é de design: o índice do Git (a staging area) só consegue listar ARQUIVOS
Se a pasta está vazia, o git add passa reto e ela nunca vira algo rastreável
Então o placeholder segue sendo a solução, não é gambiarra antiga, é como a ferramenta funciona
Novo H2: "Perguntas frequentes sobre .gitkeep e gitignore" com as perguntas e respostas do bloco geo.faq, cada pergunta em H3
Bloco curto pra entrar depois do H2 "O que é o .gitkeep?" (ancorado em material próprio real, o vídeo #03 do Curso de Next.js):
Onde eu mais esbarro nisso no dia a dia é na node_modules
No vídeo 03 do curso de Next eu comento justamente isso: a node_modules vive dentro do gitignore, e é por isso que você pode apagar ela e reinstalar quando quiser, sem dó
Ela tem muitos megabytes e não faz sentido nenhum mandar pro repositório
A sacada é que o raciocínio é o MESMO aqui: o gitignore não é só pra esconder sujeira, é pra você decidir o que o repositório precisa saber que existe
Pasta de upload, pasta de logs, pasta de cache: a estrutura importa, o conteúdo não
Aí entra o placeholder pra pasta existir vazia do outro lado quando alguém clonar o projeto
Perguntas frequentes
.gitkeep o que é?
É um arquivo vazio que você cria dentro de uma pasta só pra ela poder ir pro repositório
Como o Git não versiona diretório vazio, esse arquivo serve de placeholder e faz a pasta passar a ser rastreada
O Git não dá nenhum significado especial pro nome .gitkeep, ele só enxerga um arquivo comum ali dentro
O .gitkeep é oficial do Git?
Não
Ele é uma convenção da comunidade e não faz parte da documentação nem do comportamento do Git
O nome pegou, mas o Git trata ele como qualquer outro arquivo
Posso usar outro nome no lugar de .gitkeep?
Pode
Qualquer arquivo dentro da pasta já faz o Git passar a rastreá-la, o que importa é a localização e não o nome
.keep e placeholder.txt funcionam igualzinho, o .gitkeep só é o mais reconhecido
O Ruby on Rails, por exemplo, adota o nome .keep pro mesmo propósito, e o gerador tem a opção –skip-keeps pra não criar esses arquivos
Qual a diferença entre .gitkeep e .keep?
Só o nome
Os dois são arquivos placeholder sem conteúdo obrigatório e o Git trata os dois exatamente igual
.keep é a convenção usada no Rails, .gitkeep é a mais comum no resto da comunidade
Por que folder/ não funciona e folder/* funciona?
Porque a documentação do gitignore diz que não é possível re-incluir um arquivo se um diretório pai dele foi excluído, já que o Git não lista o conteúdo de diretórios excluídos por questão de performance
folder/ exclui o diretório inteiro e mata a exceção
folder/* exclui só o conteúdo, então o !folder/.gitkeep consegue agir
A ordem das regras no .gitignore importa?
Importa muito
Dentro do mesmo nível de precedência, a última regra que casa com o caminho é a que decide o resultado
Por isso a linha !folder/.gitkeep tem que vir depois da linha folder/*, nunca antes
Como descobrir qual regra está ignorando um arquivo?
Rode git check-ignore -v <caminho>
Esse comando existe pra depurar gitignore e exclude, e com o -v ele imprime o padrão que está excluindo aquele caminho
A saída sai no formato <arquivo-fonte>:<número-da-linha>:<padrão> <caminho>, tipo .gitignore:3:*.log debug.log
Tem também a opção –non-matching, que mostra caminhos que não casam com nenhum padrão e só funciona junto com o –verbose
Adicionei o arquivo no .gitignore e ele continua sendo rastreado, o que fazer?
As regras de ignore só valem pra arquivos ainda não rastreados
Se ele já está no índice, você precisa tirar ele de lá com git rm –cached <arquivo>, commitar a mudança e manter o padrão no .gitignore
A flag –cached mantém o arquivo no seu diretório de trabalho, ela só remove do versionamento
Leia também
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares

Como saber em qual branch estou no Git? (2 comandos simples)
Neste artigo você vai aprender a como verificar o branch atual em git, ou seja, o branch em que você está trabalhando no momento Fala […]

Como remover remote origin de repositório em git
Neste artigo você vai aprender a como remover remote origin de repositório em git, com apenas um comando! Fala programador(a), beleza? Bora aprender mais sobre […]

Como desfazer um git add? Remover arquivo da staging
Neste artigo você vai aprender a como desfazer um git add, ou seja, remover o arquivo da staging, onde ele fica após passar pelo comando […]
