Anúncios incomodam? Ir Sem anúncios Hoje

.gitignore — O arquivo que te salva de commitar node_modules

Publicado em

Um guia prático para .gitignore: o que faz, como funciona a sintaxe, padrões comuns para node_modules e arquivos .env, e a armadilha já rastreada que captura todos os desenvolvedores.

.gitignore — O Arquivo que Te Salva de Commitar node_modules 1
ANUNCIADO Remover?

Todo desenvolvedor já o fez pelo menos uma vez: commitar acidentalmente node_modules, a .env arquivo cheio de chaves de API, ou um artefato de build de 200MB. A ansiedade é real. A solução é tediosa. E tudo isso poderia ter sido evitado com um único arquivo: .gitignore.

Este guia explica o que .gitignore é, como funciona, o que colocar nele e algumas armadilhas que capturam até desenvolvedores experientes.

O que é .gitignore?

.gitignore é um arquivo de texto simples que informa o Git quais arquivos e diretórios devem ser excluídos do controle de versão. Quando o Git vê um caminho listado em .gitignore, ele fingirá que esse caminho não existe — ele não o colocará em staging, nem o cometerá, nem o mostrará no git status saída.

O arquivo fica na raiz do seu repositório, embora você também possa colocar arquivos específicos do projeto em subdiretórios. As regras em um arquivo de subdiretório se aplicam apenas a esse diretório e seus filhos. .gitignore Por que você precisa de um (a versão curta)

— mantém segredos, chaves de API e senhas fora do seu histórico do git

  • Segurança Tamanho do repositório
  • — evita que arquivos gerados e dependências enrijam seu repositório Redução de ruído
  • — evita que arquivos de configuração do editor e lixo do sistema operacional enchem todas as diferenças Saneidade da equipe
  • — todos clonam um repositório limpo e instalam dependências localmente Como funciona a sintaxe

As regras são simples, mas têm alguns detalhes não evidentes:

Linhas em branco e linhas que começam com

  • são ignoradas (use # para comentários) # Um padrão sem barra
  • corresponde a qualquer arquivo ou diretório com esse nome em qualquer lugar do repositório: ignora todos os arquivos de log em qualquer nível *.log Uma barra no final
  • corresponde apenas a diretórios: ignora o diretório, mas não um arquivo chamado dist/ Uma barra no início dist
  • ancla o padrão na raiz do repositório: ignora apenas um /todo.txt na raiz exata todo.txt Dois asteriscos (
  • corresponde acima das fronteiras de diretório:**) em qualquer parte da árvore **/logs coincidem logs/ O sinal de exclamação (
  • negativa um padrão, re-incluindo um arquivo que uma regra anterior excluiu!) Exemplo mínimo

As entradas mais comuns (e por que são importantes)

# Dependencies
node_modules/

# Environment files
.env
.env.local
.env.*.local

# Build output
dist/
build/

# Editor noise
.vscode/
.idea/
*.swp

# OS files
.DS_Store
Thumbs.db

# Logs
*.log
npm-debug.log*

node_modules/

Este é o grande. Um projeto típico em Node.js tem milhares de arquivos em

— muitas vezes centenas de megabytes. Nenhum desses arquivos pertence ao controle de versão. Qualquer pessoa que clonar seu repositório executará node_modules/ e recompilará localmente a partir de npm install . Ignore sempre. package.json.env e arquivos de segredos

Arquivos de ambiente contêm senhas de banco de dados, chaves de API e tokens de serviço. Um arquivo commitado é um incidente de segurança esperado — o GitHub detecta segredos vazados, mas também bots. Ignore o arquivo e comita um

com valores de placeholder em vez disso, para que os colegas saibam quais variáveis devem ser definidas. .env dist/ e build/ .env.example O resultado compilado ou bundle é derivado do código-fonte. Seu pipeline CI o reconstrói em cada deploy. Cometer artefatos de build cria conflitos de merge e diffs falsos que obscurecem mudanças reais no código.

Arquivos do editor e do sistema operacional

(macOS),

(Windows),

.DS_Store (JetBrains), Thumbs.db (configurações do VS Code) — esses são arquivos de workspace pessoais. Cometer eles força suas preferências em todos os outros contribuidores. Use um arquivo global .idea/ para o ruído específico da máquina, assim você não terá que adicioná-lo a cada projeto. .vscode/ .gitignore global: Configure uma vez, esqueça ~/.gitignore_global Você pode configurar um arquivo de ignorar global que se aplica a todos os repositórios em sua máquina:

Coloque arquivos do editor, lixo do sistema operacional e ferramentas pessoais lá. Reservar o projeto

para coisas que toda a equipe concorda em ignorar — como

git config --global core.excludesfile ~/.gitignore_global

A armadilha dos já rastreados .gitignore É aqui que os desenvolvedores são prejudicados: node_modules/ ou dist/.

apenas previne

arquivos não rastreados .gitignore de serem adicionados. Se um arquivo já está no seu histórico do git, adicioná-lo a não faz nada. O git continua rastreando e ainda assim cometerá alterações nele. Para parar de rastrear um arquivo já commitado: .gitignore Após isso, o arquivo permanece no disco, mas o git ignorará a partir daí.

Regras de negação: re-inclusão de arquivos

# Remove the file from git tracking without deleting it locally
git rm --cached path/to/file

# Or remove a whole directory
git rm -r --cached node_modules/

# Then commit the removal
git commit -m "Stop tracking node_modules"

Às vezes você quer ignorar um diretório, exceto por um arquivo específico — por exemplo, ignorar

mas manter

commitado: config/ Um detalhe: a negação não pode desativar um arquivo dentro de um diretório ignorado. O git para de descer em diretórios ignorados, então a regra config/defaults.json nunca tem chance de ativar. Você precisa ignorar o conteúdo em vez de ignorar o diretório em si:

config/
!config/defaults.json

Gerar um .gitignore para sua pilha ! Você não precisa escrever do zero.

# Wrong — Git never sees defaults.json inside an ignored directory
config/
!config/defaults.json

# Right — ignore everything in config/ except defaults.json
config/*
!config/defaults.json

gitignore.io

(também em ) permite que você escolha seu idioma, framework e editor e gera um arquivo de ignorar completo instantaneamente. O GitHub também oferece modelos oficiais em seu repositório github/gitignore gitignore.io— esses são bem mantidos e cobrem centenas de ambientes. Para a maioria dos projetos web, um ponto de partida sólido combina modelos para seu idioma (Node, Python, PHP, etc.), seu editor (VS Code, JetBrains) e seu sistema operacional (macOS, Windows). Verificando o que o Git está ignorando

Dois comandos ajudam a depurar uma regra de ignorar inesperada:

é especialmente útil quando uma regra não está funcionando como esperado — exibe o arquivo, número de linha e padrão responsável.

Referência rápida: Folha de resumo de padrões

# See which files are being ignored in the current directory
git status --ignored

# Find out exactly which rule is causing a file to be ignored
git check-ignore -v path/to/file

git check-ignore -v O que ele ignora

arquivos em qualquer lugar

Padrãoapenas
*.logTodos .log na raiz
/debug.logQualquer diretório chamado debug.log diretório em qualquer nível
logs/Re-incluir logs
**/logslogs mesmo se
!important.logo corresponder important.log arquivos diretamente dentro de *.log (não subdiretórios)
doc/*.txt.txt arquivos em qualquer lugar sob doc/ .gitignore — O arquivo que te salva de cometer node_modules 2
doc/**/*.txt.txt .gitignore — O arquivo que te salva de cometer node_modules 1 doc/
Quer eliminar anúncios? Fique sem anúncios hoje mesmo

Instale nossas extensões

Adicione ferramentas de IO ao seu navegador favorito para acesso instantâneo e pesquisa mais rápida

Ao Extensão do Chrome Ao Extensão de Borda Ao Extensão Firefox Ao Extensão Opera

O placar chegou!

Placar é uma forma divertida de acompanhar seus jogos, todos os dados são armazenados em seu navegador. Mais recursos serão lançados em breve!

ANUNCIADO Remover?
ANUNCIADO Remover?
ANUNCIADO Remover?

Notícias com destaques técnicos

Envolver-se

Ajude-nos a continuar fornecendo ferramentas gratuitas valiosas

Compre-me um café
ANUNCIADO Remover?