Git ignore
O Git vê cada arquivo em sua cópia de trabalho em um de três estados:
1. rastreado: um arquivo que já foi preparado ou confirmado;
2. não rastreado: um arquivo que não foi preparado nem confirmado; ou
3. ignorado: um arquivo que o Git foi forçado a ignorar.
Os arquivos ignorados costumam ser artefatos de desenvolvimento e arquivos gerados por máquina que podem ser derivados da fonte do seu repositório ou que não devem passar por commit. Exemplos comuns incluem:
- caches de dependência, como o conteúdo de
/node_modules
ou/packages
- código compilado, como arquivos
.o
,.pyc
e.class
- diretórios de saída de build, como
/bin
,/out
ou/target
- arquivos gerados no período de execução, como
.log
,.lock
ou.tmp
- arquivos de sistema ocultos, como
.DS_Store
ouThumbs.db
- arquivos pessoais de configuração do IDE, como
.idea/workspace.xml
Os arquivos ignorados são rastreados em um arquivo especial chamado .gitignore
, que é verificado na origem do seu repositório. Não há nenhum comando git ignore explícito: é preciso editar e fazer commit do arquivo .gitignore
à mão quando você tiver novos arquivos que quer ignorar. Os arquivos .gitignore
contêm padrões que são comparados com nomes de arquivos em seu repositório para determinar se devem ou não ser ignorados.
O que você vai aprender:
Padrões do Git ignore
O .gitignore
usa padrões globbing para fazer a comparação dos nomes de arquivos. Você pode construir seus padrões usando vários símbolos:
Padrão | Exemplo de correspondências | Explicação* |
---|---|---|
| Exemplo de correspondências | Explicação* Você pode prefixar um padrão com um asterisco duplo para combinar diretórios em qualquer lugar no repositório. |
| Exemplo de correspondências | Explicação* Você também pode usar um asterisco duplo para combinar arquivos com base no nome do arquivo e do diretório pai. |
| Exemplo de correspondências | Explicação* Um asterisco é um curinga que corresponde a zero ou mais caracteres. |
| Exemplo de correspondências | Explicação* Inserir um ponto de exclamação a um padrão faz com que ele seja negado. Se um arquivo corresponder a um padrão, mas também corresponder a um padrão de negação definido mais tarde no arquivo, não vai ser ignorado. |
| Exemplo de correspondências | Explicação* Os padrões definidos após um padrão de negação vão ignorar de volta todos os arquivos já negados. |
| Exemplo de correspondências | Explicação* Prefixar uma barra obriga a correspondência apenas com arquivos na origem do repositório. |
| Exemplo de correspondências | Explicação* Um ponto de interrogação corresponde exatamente a um caractere. |
| Exemplo de correspondências | Explicação* Os colchetes também podem ser usados para corresponder a um único caractere de um intervalo especificado. |
| Exemplo de correspondências | Explicação* Os colchetes correspondem a um único caractere no conjunto especificado. |
| Exemplo de correspondências | Explicação* O ponto de exclamação pode ser usado para estabelecer correspondência com qualquer caractere, exceto um do conjunto especificado. |
| Exemplo de correspondências | Explicação* Os intervalos podem ser numéricos ou alfabéticos. |
| Exemplo de correspondências | Explicação* Se você não anexar uma barra, o padrão vai combinar os arquivos e o conteúdo dos diretórios com esse nome. Na correspondência de exemplo à esquerda, os diretórios e arquivos chamados logs são ignorados |
| Exemplo de correspondências | Explicação* Acrescentar uma barra indica que o padrão é um diretório. Todo o conteúdo de qualquer diretório no repositório que corresponda a esse nome – incluindo todos os seus arquivos e subdiretórios – vai ser ignorado |
| Exemplo de correspondências | Explicação* Espere um minuto! O |
| Exemplo de correspondências | Explicação* Um asterisco duplo corresponde a zero ou mais diretórios. |
| Exemplo de correspondências | Explicação* Os curingas também podem ser usados em nomes de diretórios. |
| Exemplo de correspondências | Explicação* Os padrões que especificam um arquivo em um determinado diretório são relativos à origem do repositório. (Você pode prefixar uma barra se quiser, mas não acontece nada de especial.) |
** essas explicações supõem que seu arquivo.gitignore está no diretório de nível superior do seu repositório, assim como a convenção. Se seu repositório tiver vários arquivos .gitignore, substitua “origem do repositório” por “diretório que contém o arquivo .gitignore” (e pense em unir todos eles, para a sanidade de sua equipe).*
Além desses caracteres, você pode usar # para incluir comentários no arquivo .gitignore
:
# ignore all logs
*.log
Para desconsiderar os caracteres do padrão .gitignore
, você pode usar \ se tiver arquivos ou diretórios que os contenham:
# ignore the file literally named foo[01].txt
foo\[01\].txt
Material relacionado
Git Branch
VER SOLUÇÃO
Aprenda a usar o Git com o Bitbucket Cloud
As regras do git ignore costumam ser definidas em um arquivo .gitignore
na origem do seu repositório. No entanto, você pode optar por definir vários arquivos .gitignore
em diretórios diferentes no repositório. Cada padrão em um arquivo .gitignore
específico é testado em relação ao diretório que contém esse arquivo. No entanto, a convenção, e a abordagem mais simples, é definir um único arquivo .gitignore
na origem. Conforme seu arquivo .gitignore
é verificado, ele é atualizado como qualquer outro arquivo em seu repositório e compartilhado com seus colegas quando você faz o push. No geral, você só deve incluir padrões no .gitignore
se eles beneficiarem outros usuários do repositório.
Regras pessoais do Git ignore
Você também pode definir padrões pessoais para um determinado repositório em um arquivo especial em .git/info/exclude
. Esses arquivos não são atualizados nem distribuídos com seu repositório, portanto, é um lugar apropriado para incluir padrões que, talvez, só vão beneficiar você. Por exemplo, se você tiver uma configuração de log personalizada ou ferramentas especiais de desenvolvimento que produzem arquivos no diretório atual do seu repositório, você pode preferir que sejam adicionadas ao .git/info/exclude
para evitar um commit por acidente em seu repositório.
Regras globais do Git ignore
Você também pode definir padrões globais do Git ignore para todos os repositórios em seu sistema local definindo a propriedade Git core.excludesFile
. Você mesmo vai ter que criar este arquivo. Se não tiver certeza de onde colocar o arquivo .gitignore
global, seu diretório inicial pode ser uma boa escolha (e fica mais fácil encontrar mais tarde). Depois de criar o arquivo, você vai precisar configurar sua localização com o git config
:
$ touch ~/.gitignore
$ git config --global core.excludesFile ~/.gitignore
Você deve ter cuidado com quais padrões escolhe ignorar por completo, pois diferentes tipos de arquivo são relevantes para diferentes projetos. Arquivos especiais do sistema operacional (por exemplo, .DS_Store
e thumbs.db
) ou arquivos temporários criados por algumas ferramentas do desenvolvedor são opções comuns a serem ignoradas por completo.
Como ignorar um arquivo após o commit
Caso queira ignorar um arquivo após o commit, vai precisar excluir o arquivo do repositório e, em seguida, adicionar uma regra .gitignore
para ele. Usar a opção --cached
com git rm
faz o arquivo ser excluído do seu repositório, mas ele vai permanecer em seu diretório atual na forma de um arquivo ignorado.
$ echo debug.log >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git commit -m "Start ignoring debug.log"
Você pode omitir a opção --cached
se quiser excluir o arquivo do repositório e do sistema de arquivos local.
Como fazer o commit de um arquivo ignorado
É possível forçar o commit de um arquivo ignorado no repositório usando a opção -f
(ou --force
) com git add
:
$ cat .gitignore
*.log
$ git add -f debug.log
$ git commit -m "Force adding debug.log"
Pode ser uma boa ideia se você tiver um padrão geral (como *.log
) definido e também quiser fazer commit de um arquivo específico. No entanto, uma solução melhor é definir uma exceção à regra geral:
$ echo !debug.log >> .gitignore
$ cat .gitignore
*.log
!debug.log
$ git add debug.log
$ git commit -m "Adding debug.log"
Essa solução é mais óbvia e menos confusa para seus colegas.
Como fazer o stash de um arquivo ignorado
git stash é uma função avançada do Git para armazenar por um tempo e reverter alterações locais, o que possibilita fazer a reaplicação mais tarde. Como seria de se esperar, por padrão, o git stash
ignora arquivos ignorados e apenas faz o stash das alterações em arquivos que são rastreados pelo Git. No entanto, você também pode usar o git stash com a opção --all para fazer o stash de alterações em arquivos ignorados e não rastreados.
Como depurar arquivos .gitignore
Se você tiver padrões .gitignore
complicados, ou padrões espalhados por vários arquivos .gitignore
, pode ser difícil descobrir por que um determinado arquivo está sendo ignorado. Você pode usar o comando git check-ignore
com a opção -v
(ou --verbose
) para determinar qual padrão está fazendo com que um arquivo específico seja ignorado:
$ git check-ignore -v debug.log
.gitignore:3:*.log debug.log
O resultado mostra:
<file containing the pattern> : <line number of the pattern> : <pattern> <file name>
Você pode passar vários nomes de arquivos para o git check-ignore
se quiser, e os nomes nem precisam corresponder aos arquivos que existem em seu repositório.
Compartilhar este artigo
Próximo tópico
Leitura recomendada
Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.