Featured image of post Por que o Git não rastreia pastas vazias? O que são .gitkeep e .gitignore?

Por que o Git não rastreia pastas vazias? O que são .gitkeep e .gitignore?

Aprofunde-se no motivo pelo qual o Git ignora pastas vazias e como usar corretamente .gitkeep e .gitignore para gerenciar a estrutura de diretórios do projeto. Inclui exemplos práticos e melhores práticas.

Simplificando, .gitkeep é um arquivo fictício convencional. Sua existência serve a apenas um propósito: forçar o Git a rastrear uma pasta que, de outra forma, deveria estar vazia.

Por que é necessário?

A lógica de design do Git é “rastrear alterações de arquivos”, não “rastrear pastas”. Se o seu projeto contém uma pasta vazia, o Git irá ignorá-la completamente e não a enviará para o GitHub ou para o seu servidor.

Isso cria um problema: às vezes, seu código requer que um determinado diretório exista para ser executado, mas você não quer enviar dados de teste ou arquivos temporários. Se o diretório não existir, o programa pode falhar.

Essas pastas geralmente são:

  • logs/: Para arquivos de log
  • uploads/: Arquivos enviados pelos usuários
  • tmp/: Arquivos temporários
  • cache/: Dados de cache

Esses diretórios são necessários em tempo de execução, seu conteúdo não deve ser comitado, mas a pasta em si deve existir.

Como funciona

Para “enganar” o Git para manter essa pasta, colocamos um arquivo oculto sem função real dentro dela, fazendo o Git pensar: “Ah! Tem alguma coisa aqui, preciso registrar.”

Analogia prática:

Imagine que você está construindo uma casa (escrevendo um projeto):

Arquivo Descrição
.gitignore Como uma etiqueta de “Não jogue no lixo”, dizendo ao faxineiro (Git) quais itens (como comida estragada, papel usado) absolutamente não devem ser movidos para a casa nova.
.gitkeep Como uma “Caixa de reserva”. A casa nova ainda não está mobiliada, mas você precisa reservar espaço para o depósito, então coloca uma caixa lá para avisar aos carregadores que essa área faz parte da casa e não deve ser demolida.

Como usar?

  1. Crie um arquivo chamado .gitkeep dentro da pasta vazia.
  2. O conteúdo do arquivo pode estar vazio, ou você pode escrever “Keep this directory”.
  3. Faça git add e commit deste arquivo.

Comparando .gitkeep vs .gitignore

Recurso .gitkeep .gitignore
Status Oficial Não oficial (Apenas uma convenção da comunidade) Oficial (Recurso nativo do Git)
Função Principal Manter uma pasta, evitar que ela seja esquecida pelo Git Excluir arquivos, evitar que sejam rastreados pelo Git
Cenários Comuns Pastas de log vazias, pastas de cache Arquivos de senha, node_modules, arquivos temporários

Conselho Prático: Pensando Fora da Caixa

Embora o .gitkeep seja comumente usado, ele na verdade não faz parte oficial do Git. Na verdade, você poderia usar README.md ou .placeholder para obter o mesmo efeito. Mas por que todos preferem o .gitkeep? Porque é autoexplicativo: “Este arquivo não faz nada além de impedir que o Git exclua esta pasta.”

Se você quiser parecer um pouco mais profissional, há uma abordagem mais criativa e mais funcional do que apenas usar o .gitkeep:

Coloque um .gitignore na pasta vazia com o seguinte conteúdo:

# Ignorar tudo neste diretório
*
# Mas não me ignore (este próprio arquivo .gitignore)
!.gitignore

Isso garante que você mantenha a pasta enquanto garante que arquivos de lixo dentro dela nunca sejam comitados acidentalmente. Este é o verdadeiro método “à prova de falhas” (Foolproof).

Conclusão

  • .gitkeep é um compromisso humano com a lógica de design do Git.
  • Não é uma especificação oficial, mas tornou-se um padrão de fato para os desenvolvedores.
  • O que é verdadeiramente importante é entender como o .gitignore funciona; o .gitkeep é apenas uma pequena ferramenta para ajudar o Git a “entender” pastas vazias.

Reference

All rights reserved,未經允許不得隨意轉載
Criado com Hugo
Tema Stack desenvolvido por Jimmy