Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.42.1 → 2.47.1 no changes
- 2.42.0 08/21/23
- 2.41.1 → 2.41.2 no changes
- 2.41.0 06/01/23
- 2.34.1 → 2.40.3 no changes
- 2.34.0 11/15/21
- 2.33.1 → 2.33.8 no changes
- 2.33.0 08/16/21
- 2.32.1 → 2.32.7 no changes
- 2.32.0 06/06/21
- 2.22.2 → 2.31.8 no changes
- 2.22.1 08/11/19
- 2.22.0 06/07/19
- 2.20.1 → 2.21.4 no changes
- 2.20.0 12/09/18
- 2.19.1 → 2.19.6 no changes
- 2.19.0 09/10/18
- 2.17.0 → 2.18.5 no changes
- 2.16.6 12/06/19
- 2.10.5 → 2.15.4 no changes
- 2.9.5 07/30/17
- 2.5.6 → 2.8.6 no changes
- 2.4.12 05/05/17
- 2.3.10 no changes
- 2.2.3 no changes
- 2.1.4 12/17/14
- 2.0.5 12/17/14
DESCRIÇÃO
Um arquivo gitignore
define quais são os arquivos são intencionalmente deixados de fora e não são rastreados. Os arquivos já monitorados pelo Git não são afetados; consulte as NOTAS abaixo para obter detalhes.
Cada linha num arquivo gitignore
especifica um padrão. Ao decidir se deve ignorar um caminho, o Git normalmente verifica os padrões de várias fontes no gitignore
, com a seguinte ordem de precedência, da mais alta para a mais baixa (dentro de um nível de precedência, o último padrão correspondente decide o resultado):
-
Padrões lidos na linha de comando para os comandos que os suportam.
-
Os padrões lidos de um arquivo
.gitignore
no mesmo diretório que o caminho ou em qualquer diretório principal (até o cume da árvore de trabalho), com padrões nos arquivos de nível superior sendo substituídos por aqueles em arquivos de nível inferior até o diretório que contém o arquivo. Esses padrões correspondem ao local do arquivo.gitignore
. Em seu repositório, um projeto normalmente inclui estes arquivos.gitignore
, contendo padrões para os arquivos gerados como parte da compilação do projeto. -
Padrões lidos de
$GIT_DIR/info/exclude
. -
Padrões lidos do arquivo especificado pela variável de configuração
core.excludesFile
.
Qual arquivo deve ser colocado num padrão depende de como o padrão deve ser usado.
-
Os padrões que devem ser controlados por versão e distribuídos para outros repositórios via clone (ou seja, arquivos que todos os desenvolvedores desejam ignorar) devem ser colocados num arquivo
.gitignore
. -
Os padrões que são específicos de um determinado repositório, mas que não precisam ser compartilhados com outros repositórios relacionados (por exemplo, arquivos auxiliares que residem dentro do repositório, mas que são específicos do fluxo de trabalho de um usuário), devem ser inseridos no arquivo
$GIT_DIR/info/exclude
. -
Os padrões que um usuário deseja que o Git ignore em todas as situações (por exemplo, backup ou arquivos temporários gerados pelo editor de escolha do usuário) geralmente vão para um arquivo especificado em
core.excludesFile
no~/.gitconfig
do usuário. O seu valor predefinido é$XDG_CONFIG_HOME/git/ignore
. Se$XDG_CONFIG_HOME
não estiver definido ou estiver vazio,$HOME/.config/git/ignore
será usado em seu lugar.
As ferramentas de encanamento subjacentes do Git, como o comando git ls-files e o git read-tree, leem padrões gitignore
especificados por opções de linha de comando ou de arquivos especificados pelas opções de linha de comando. Ferramentas Git de nível superior, como o "git status" e o "git add", usam padrões das fontes especificadas acima.
FORMATO DO PADRÃO
-
Uma linha em branco não corresponde a nenhum arquivo, portanto, pode servir como um separador para facilitar a leitura.
-
Uma linha iniciada com # serve como um comentário. Coloque uma barra invertida ("
\
") na frente do primeiro hash para padrões que começam com um hash. -
Os espaços finais são ignorados, a menos que estejam entre aspas com barra invertida ("
\
"). -
Um prefixo opcional "
!
" que nega o padrão; qualquer arquivo correspondente excluído por um padrão anterior será incluído novamente. Não é possível incluir novamente um arquivo se um diretório principal deste arquivo tenha sido excluído. O Git não lista os diretórios excluídos por motivos de desempenho, portanto, quaisquer padrões nos arquivos contidos não têm efeito, independentemente de onde estejam definidos. Coloque uma barra invertida ("\
") na frente do primeiro "!
" para padrões que começam com um "!
" literal, por exemplo, "\!important!.txt
". -
A barra "
/
" é usada como separador de diretório. Os separadores podem ocorrer no início, no meio ou no final do padrão de pesquisa.gitignore
. -
Se houver um separador no início ou no meio (ou em ambos) do padrão, então o padrão é relativo ao nível do diretório do próprio arquivo
.gitignore
específico. Caso contrário, o padrão também poderá corresponder a qualquer nível abaixo do nível.gitignore
. -
Se houver um separador no final do padrão, o padrão corresponderá apenas a diretórios; caso contrário, o padrão poderá corresponder a arquivos e diretórios.
-
Por exemplo, um padrão
doc/frotz/
corresponde ao diretóriodoc/frotz
, mas não ao diretórioa/doc/frotz
; no entanto,frotz/
corresponde afrotz
ea/frotz
, que é um diretório (todos os caminhos são relativos a partir do arquivo.gitignore
). -
Um asterisco "
*
" corresponde a qualquer coisa, exceto uma barra. O caractere "?
" corresponde a qualquer caractere, exceto "/
". A notação de intervalo, por exemplo,[a-zA-Z]
, pode ser usada para corresponder a um dos caracteres num intervalo. Consulte fnmatch(3) e a opçãoFNM_PATHNAME
para obter uma descrição mais detalhada.
Dois asteriscos consecutivos ("**
") nos padrões coincidentes ao pathname
completo podem ter um significado especial:
-
Um "
**
" inicial seguido de uma barra significa que houve coincidência em todos os diretórios. Por exemplo, "**foo
" é coincidente ao arquivo ou diretório "foo
" em qualquer lugar, o mesmo que o padrão "foo
". "**/foo/bar
" é coincidente ao arquivo ou diretório "bar
" em qualquer lugar que esteja diretamente sob o diretório "foo
". -
Um "
/**
" à direita corresponde a tudo que estiver dentro. Por exemplo, "abc/**
" coincide todos os arquivos dentro do diretório "abc
", relativos à localização do arquivo.gitignore
, com uma profundidade infinita. -
Uma barra seguida por dois asteriscos consecutivos e uma barra coincide com zero ou mais diretórios. Por exemplo, "
a/**/b
" coincide com "a/b
", "a/x/b
", "a/x/y/b
" e assim por diante. -
Outros asteriscos consecutivos são considerados asteriscos regulares e corresponderão de acordo com as regras anteriores.
CONFIGURAÇÃO
A variável de configuração opcional core.excludesFile
indica um caminho para um arquivo que contém padrões de nomes de arquivos que serão excluídos, semelhante a $GIT_DIR/info/exclude
. Os padrões no arquivo de exclusão são usados além dos padrões em $GIT_DIR/info/exclude
.
OBSERVAÇÕES
O objetivo dos arquivos gitignore é garantir que determinados arquivos não rastreados pelo git permaneçam não rastreados.
Para parar de rastrear um arquivo que está sendo rastreado no momento, use git rm --cached para remover o arquivo do índice. O nome do arquivo pode então ser adicionado ao arquivo .gitignore
para impedir que o arquivo seja reintroduzido em commits posteriores.
O git não segue links simbólicos ao acessar um arquivo .gitignore
na árvore de trabalho. Isso mantém o comportamento consistente quando o arquivo é acessado a partir do índice ou de uma árvore em comparação com o sistema de arquivos.
EXEMPLOS
-
O padrão
hello.*
corresponde a qualquer arquivo ou diretório cujo nome comece comhello.
. Se quisermos restringir isso apenas ao diretório e não aos seus subdiretórios, podemos preceder o padrão com uma barra, ou seja,/hello.*
; o padrão agora corresponde ahello.txt
,hello.c
, mas não aa/hello.java
. -
O padrão
foo/
corresponderá a um diretóriofoo
e aos caminhos abaixo dele, mas não corresponderá a um arquivo regular ou a um link simbólicofoo
(isso é consistente com a maneira como o pathpec funciona em geral no git) -
Os padrões
doc/frotz
e/doc/frotz
têm o mesmo efeito em qualquer arquivo.gitignore
. Em outras palavras, uma barra na frente não é relevante se já houver uma barra no meio do padrão. -
O padrão
foo/*
corresponde afoo/test.json
(um arquivo regular),foo/bar
(um diretório), mas não corresponde afoo/bar/hello.c
(um arquivo regular), pois o asterisco no padrão não corresponde abar/hello.c
, que tem uma barra.
$ git status [...] # Arquivos não rastreados: [...] # Documentation/foo.html # Documentation/gitignore.html # file.o # lib.a # src/internal.o [...] $ cat .git/info/exclude # ignorar os objetos e arquivos, em qualquer lugar da árvore. *.[oa] $ cat Documentation/.gitignore # ignorar os arquivos html gerados, *.html # menos o foo.html que é mantido manualmente !foo.html $ git status [...] # Arquivos não rastreados: [...] # Documentation/foo.html [...]
Outro exemplo:
$ cat .gitignore vmlinux* $ ls arch/foo/kernel/vm* arch/foo/kernel/vmlinux.lds.S $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore
O segundo .gitignore impede que o git ignore o arch/foo/kernel/vmlinux.lds.S
.
Exemplo para excluir tudo, exceto um diretório específico foo/bar
(observe o /*
- sem a barra, o curinga também excluiria tudo dentro de foo/bar
):
$ cat .gitignore # excluí tudo menos o diretório foo/bar /* !/foo /foo/* !/foo/bar
GIT
Parte do conjunto git[1]