Se o Git no seu Mac estiver ignorando um arquivo, execute git check-ignore -v -- 'path/to/file' a partir do repositório no Terminal. A saída identifica a fonte de exclusão, o número da linha, o padrão correspondente e o caminho, para que você possa encontrar a regra e decidir se deve alterá-la. Se o arquivo já estiver sob rastreamento, repita a verificação com --no-index.

Execute a verificação a partir do repositório

Abra o Terminal e navegue até o diretório raiz do repositório. Você pode digitar cd com um espaço à direita, arrastar a pasta do projeto do Finder para a janela do Terminal para inserir seu caminho e, em seguida, pressionar Return. Confirme que você está em uma árvore de trabalho do Git com git status; se o Git informar que o diretório não é um repositório, navegue primeiro para a pasta do repositório real do projeto.

Use o caminho para o arquivo relativo à raiz do repositório. Por exemplo, para diagnosticar build/cache.json, execute:

git check-ignore -v -- 'build/cache.json'

As aspas simples tornam o caminho literal para o shell padrão do macOS, o zsh. Elas são especialmente úteis quando um nome contém espaços ou caracteres como *, que de outra forma o shell interpretaria. O -- marca o fim das opções, o que também impede que um caminho que comece com hífen seja tratado como um argumento/flag.

Leia a saída para localizar a regra

Uma correspondência detalhada se parece com isto:

.gitignore:12:build/    build/cache.json

Os campos significam: .gitignore é o arquivo de origem, 12 é o número da linha, build/ é o padrão e build/cache.json é o caminho consultado. Abra esse arquivo de origem no seu editor de texto de preferência e inspecione a linha indicada. A origem pode ser, em vez disso, um .gitignore aninhado, .git/info/exclude, ou um arquivo de exclusões globais configurado para a sua conta do Git. O Git documenta os campos da saída detalhada e essas fontes de exclusão.

Um caminho de origem sob .git/info/exclude se aplica a este repositório, mas normalmente não é compartilhado com outros clones. Um arquivo de exclusões globais se aplica aos seus próprios repositórios. Um padrão no .gitignore é geralmente o local correto para uma regra que o projeto deve compartilhar. O Git verifica as fontes de exclusão por ordem de precedência: arquivos .gitignore em níveis mais baixos podem substituir regras superiores, e o último padrão correspondente no mesmo nível de precedência determina o resultado. O manual do gitignore explica a precedência e o uso pretendido de cada fonte.

Se o Git não exibir nada

Nenhuma saída geralmente significa que nenhum padrão de exclusão correspondeu àquele caminho. A saída normal do comando lista caminhos ignorados; use -v para ver o padrão determinante. Verifique se você está no repositório correto e se a ortografia e o uso de maiúsculas/minúsculas do caminho estão exatos.

Arquivos sob rastreamento são uma fonte comum de confusão: por padrão, o git check-ignore não os reporta porque as regras de exclusão se aplicam a arquivos que ainda não estão sendo rastreados. Adicione --no-index para pedir que o Git verifique as regras de qualquer forma:

git check-ignore -v --no-index -- 'build/cache.json'

Esta opção diagnostica a regra; ela não remove o rastreamento do arquivo nem o remove de um commit. O método documentado do Git para parar de rastrear um arquivo é git rm --cached, seguido por uma regra de exclusão apropriada. Isso altera o índice, portanto, inspecione o status e compreenda o efeito antes de executá-lo. O Git explica a limitação de arquivos rastreados e a opção --no-index.

Verifique negações e escopo do padrão

Uma linha correspondente que começa com ! é uma negação: ela pode incluir novamente um caminho após um padrão de exclusão anterior, portanto, uma correspondência detalhada com tal linha não significa que o arquivo continue ignorado. O Git também não pode incluir novamente um arquivo se um diretório pai estiver excluído; o diretório pai deve primeiro se tornar percorrível por meio de regras correspondentes. A documentação de padrões do Git descreve a negação e essa limitação de diretório pai.

Os padrões são interpretados em relação ao arquivo .gitignore que os contém. Um padrão com uma barra tem escopo limitado ao nível do diretório daquele arquivo; um padrão de nome simples pode corresponder nesse nível e abaixo dele. Isso é importante quando uma regra vem de um .gitignore aninhado: o padrão exibido pode parecer correto, mas estar sendo aplicado a uma subárvore diferente da esperada. Verifique o local do arquivo de origem, bem como o texto do padrão.

Para um único arquivo, git check-ignore -v costuma ser suficiente para identificar onde procurar. Para um arquivo rastreado, inclua --no-index; depois disso, use a origem, a linha e o padrão reportados para determinar se a regra deve ser alterada, restringida ou mantida.

Fontes