Git 🌙
Português (Brasil) ▾ Topics ▾ Latest version ▾ gitignore last updated in 2.42.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

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ó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).

  • 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ção FNM_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 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