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.44.0 no changes
- 2.42.0 08/21/23
- 2.41.0 06/01/23
- 2.34.1 → 2.40.1 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
DESCRIÇÃO
A gitignore
file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected; see the NOTES below for details.
Each line in a gitignore
file specifies a pattern. When deciding whether to ignore a path, Git normally checks gitignore
patterns from multiple sources, with the following order of precedence, from highest to lowest (within one level of precedence, the last matching pattern decides the outcome):
-
Padrões lidos na linha de comando para os comandos que os suportam.
-
Patterns read from a
.gitignore
file in the same directory as the path, or in any parent directory (up to the top-level of the working tree), with patterns in the higher level files being overridden by those in lower level files down to the directory containing the file. These patterns match relative to the location of the.gitignore
file. A project normally includes such.gitignore
files in its repository, containing patterns for files generated as part of the project build. -
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.
The underlying Git plumbing tools, such as git ls-files and git read-tree, read gitignore
patterns specified by command-line options, or from files specified by command-line options. Higher-level Git tools, such as git status and git add, use patterns from the sources specified above.
FORMATO DO PADRÃO
-
Uma linha em branco não corresponde a nenhum arquivo, portanto, pode servir como um separador para facilitar a leitura.
-
A line starting with # serves as a comment. Put a backslash ("
\
") in front of the first hash for patterns that begin with a hash. -
Os espaços finais são ignorados, a menos que estejam entre aspas com barra invertida ("
\
"). -
An optional prefix "
!
" which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined. Put a backslash ("\
") in front of the first "!
" for patterns that begin with a literal "!
", for example, "\!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
). -
An asterisk "
*
" matches anything except a slash. The character "?
" matches any one character except "/
". The range notation, e.g.[a-zA-Z]
, can be used to match one of the characters in a range. See fnmatch(3) and the FNM_PATHNAME flag for a more detailed description.
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
The optional configuration variable core.excludesFile
indicates a path to a file containing patterns of file names to exclude, similar to $GIT_DIR/info/exclude
. Patterns in the exclude file are used in addition to those in $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]