05 Confiar na memória
impedir a entrada, não remover depois
Não tem código para mostrar aqui, e é esse o ponto. O erro é uma intenção:
git add .
Você sabe que o .env não pode subir. Sabe hoje, sabe
amanhã. Um dia você está com pressa, resolvendo outra coisa, e digita esse
ponto. Ele quer dizer tudo.
O Git foi feito para não esquecer. Essa é a qualidade dele, e é exatamente o que o torna implacável com segredo.
Se a senha entrou num commit, apagar o arquivo depois não resolve: o commit antigo continua no histórico. Quem clonar leva. Quem já clonou, já tem. Se o repositório passou um minuto público, considere o segredo queimado — não existe desfazer, só existe trocar.
É por isso que a ordem certa é sempre a mesma, e ela não é intuitiva:
- 1 · trocarGere uma senha nova. O segredo antigo está comprometido no momento em que virou público — nenhuma limpeza de histórico desfaz isso.
- 2 · ignorarSó depois arrume o
.gitignore, para o novo não seguir o caminho do velho.
Quem faz na ordem inversa passa horas reescrevendo histórico para esconder uma senha que continua valendo.
Quatro linhas no .gitignore. A última é a que quase ninguém
escreve:
# Environment variables
.env
.env.local
.env.production
!.env.example
A exclamação é uma exceção: "ignore tudo que combina com o de
cima, menos este". Sem ela, o .env.example — o formulário em
branco que todo mundo precisa — seria bloqueado junto e ninguém
conseguiria configurar o projeto.
E a regra vale para além de senha. Qualquer arquivo que fale da sua vida entra na lista, com o motivo escrito ao lado para ninguém apagar depois:
# Dados extraídos (contêm conteúdo real de e-mail — NUNCA versionar)
emails_*.json
quarentena/
Não confira com o olho. As regras do .gitignore se
sobrepõem e uma exceção pode cancelar a outra sem avisar. Pergunte ao
próprio Git qual regra pegou o arquivo:
git check-ignore -v .env
A resposta real, neste repositório:
.gitignore:15:.env .env
Lê-se: o arquivo .env foi bloqueado pela regra escrita na
linha 15 do .gitignore. Não é opinião — é o Git
dizendo quem mandou.
Se o comando não responder nada, o arquivo não está ignorado. O silêncio aqui é a má notícia.
E a frase que fecha a aula, dita na frente da tela:
o .env existe no meu computador, mas o Git não enxerga
ele.
arquivo · .gitignore linhas 14–18