Git
Português (Brasil) ▾ Topics ▾ Latest version ▾ gitignore last updated in 2.44.0

NOME

gitignore - Especifica quais arquivos intencionalmente não rastreados serão ignorados

RESUMO

$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore

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ório doc/frotz, mas não ao diretório a/doc/frotz; no entanto, frotz/ corresponde a frotz e a/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 com hello.. 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 a hello.txt, hello.c, mas não a a/hello.java.

  • O padrão foo/ corresponderá a um diretório foo e aos caminhos abaixo dele, mas não corresponderá a um arquivo regular ou a um link simbólico foo (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 a foo/test.json (um arquivo regular), foo/bar (um diretório), mas não corresponde a foo/bar/hello.c (um arquivo regular), pois o asterisco no padrão não corresponde a bar/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]

scroll-to-top