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

ignorar todos os arquivos de uma pasta menos a pasta capa

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
Formação Recomendada

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

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares