Git está ignorando arquivos que não estão no gitignore

117

Eu tenho um repositório git que está ignorando arquivos de imagem, bem como alguns outros arquivos, mas meu .gitignorearquivo só ignora um config.phparquivo. Existe algum arquivo global para ignorar em algum lugar que não consigo encontrar? Tenho que especificar os arquivos para adicioná-los agora, e está me dando este aviso:

Os caminhos a seguir são ignorados por um de seus arquivos .gitignore.

O conteúdo do meu ~/.gitconfigarquivo é apenas meu endereço de e-mail.

Ian Hunter
fonte

Respostas:

198

git check-ignore

Use o git check-ignorecomando para depurar seu arquivo gitignore (excluir arquivos).

Por exemplo:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

A saída acima detalha sobre o padrão de correspondência (se houver) para cada nome de caminho fornecido (incluindo a linha).

Portanto, talvez sua extensão de arquivo não seja ignorada, mas todo o diretório.

O formato retornado é:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

Ou use o seguinte comando para imprimir sua página inicial .gitignoredo usuário e a pasta do repositório:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

Como alternativa, use o git add -fque permite adicionar arquivos de outra forma ignorados.

Veja: man gitignore, man git-check-ignorepara mais detalhes.

Sintaxe

git check-ignore [options] pathname ...

git check-ignore [options] --stdin

Kenorb
fonte
5
Isso é muito melhor do que a resposta aceita. Sem ofensa para aquele, mas isso salvou meu dia. Obrigado kenorb.
luanjunyi
1
Merece mais votos positivos. Descobri que algum gitignore estranho em algumas pastas / vendor / causou problemas com a última versão do git.
Manuel Arwed Schmidt,
2
este me salvou hoje ... parece que o Visual Studio criou um arquivo chamado gitignore_global.txt na pasta de documentos do usuário e isso estava ignorando arquivos que não fui capaz de (des) ignorar
Samuel
1
Resolveu perfeitamente o meu problema. Alguns padrões não são fáceis de perceber !!
Willa de
54

Pode ser bom saber que sua configuração git pode conter um core.excludesfile que é um caminho para um arquivo com padrões adicionais que são ignorados. Você pode descobrir se possui tal configuração executando (no problemático git repo):

git config core.excludesfile

Se ele imprimir um caminho de arquivo, examine o conteúdo desse arquivo para obter mais informações.

No meu caso, instalei o git através de uma versão antiga do boxen que ignorou o padrão 'Ícone?' que no meu caso me deu o aviso, mencionado nesta pergunta, para ícones de uma pasta (estou em um sistema de arquivos que não diferencia maiúsculas de minúsculas, é por isso que o ícone? corresponde aos ícones).

Gabrielf
fonte
2
Esse era realmente o meu problema. Não tenho certeza de como ou quando este arquivo é editado, mas ele tinha o arquivo que eu queria listado
toxaq
2
Obrigado, você me salvou horas de pura agonia. No meu caso, foi a instalação da árvore de código-fonte (uma ferramenta visualize git repo) que, sem lógica, criou na pasta de documentos um gitignore_global.txt que incluía várias exclusões.
Objeto Mecânico
Eu tive a mesma maldita Icon?sendo ignorada.
Justin Skiles
Este foi o meu caso. Tinha algumas regras dentro do arquivo global de ignorar. Obrigado pela dica +1
Madness
Eu tinha * .json em meu ignorar global - fale sobre um pesadelo - obrigado!
Jason Perfetto
31

Confira:

  1. Você já procurou outros arquivos .gitignore, pois pode haver muitos deles.

  2. Além disso, consulte REPO / .git / config para ver se há algo lá.

  3. Repo exclude Regras locais por repo podem ser adicionadas ao arquivo .git / info / exclude em seu repo. Essas regras não são confirmadas com o repo, portanto, não são compartilhadas com outras pessoas. Este método pode ser usado para arquivos gerados localmente que você não espera que outros usuários gerem, como arquivos criados por seu editor.

gahooa
fonte
Não há outros arquivos .gitignore no repositório, nem há nada no arquivo .git / config que ignore nada. Como .git / info / exclude é configurado?
Ian Hunter
4
Não está claro por que essa resposta foi marcada como respondida. Como exatamente esse problema foi resolvido?
Próximo desenvolvedor de
excluir era o meu problema. Eu sabia que havia outra maneira de ignorar, que eu havia usado no passado, mas esqueci onde estava!
Chucky
22

Eu tive o mesmo problema - um diretório estava sendo ignorado pelo git com este erro:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

Finalmente descobri que meu problema era uma linha no meu ~/.gitignore_global:

TAGS

que estava combinando com o caminho app/views/admin/tags. Corrigi-o adicionando uma barra inicial ao arquivo gitignore global

/TAGS

e git começou a rastrear meu diretório novamente.

Shevaun
fonte
3
+1 por me fazer procurar correspondências parciais ... gitignore_global.txt continha "[Rr] elease * /" que estava fazendo com que meu diretório "releasenotes" fosse ignorado.
Trev
Para tornar ainda mais difícil, o git irá ignorar apenas os arquivos recém-adicionados, não os que já estão no repo. Portanto, quando adicionei "foo /" ao meu .gitignore, ele ignorou apenas os arquivos adicionados recentemente nos subdiretórios foo e nem todos os arquivos. Levei uma hora para descobrir por que alguns arquivos estavam sendo ignorados e outros não.
ccleve
Eu tenho o mesmo problema. SourceTree define o arquivo ~ / .gitignore_global no menu Ferramentas-> item Opções-> guia Git. Depois de limpar o campo Global Ignore list "git add ...", o comando funcionou.
Kate
Eu tive o mesmo problema. Eu tinha um helpdiretório que estava sendo ignorado. Felizmente, encontrei sua resposta muito rapidamente.
Abdul Sadik Yalcin
9

Para mim, acidentalmente tive um curinga em meu arquivo ~ / .gitignore_global. Talvez verifique aí?


fonte
1
Esse foi exatamente o problema para mim. Eu tinha * .png lá, não tenho ideia de como ele apareceu lá.
Shahar
3

Outra coisa a tentar: eu tinha um diretório B com seu próprio .gitrepositório aninhado no diretório A do meu projeto (mas não como um submódulo). Fiz algumas alterações em B e queria torná-lo um submódulo genuíno. Acredito que git A estava ignorando B automaticamente porque continha seu próprio repositório (consulte Repositórios git aninhados sem submódulos? ). Renomeei a pasta B e tentei cloná-la novamente como um submódulo, e isso estava me trazendo a mensagem de erro "ignorado por .gitignore" enganosa. A solução foi excluir .gitde B.

Matt Montag
fonte
2

Eu estava tendo exatamente o mesmo problema que você. A única resposta que você recebeu listou alguns lugares para verificar, mas nenhum deles resolveu o problema para mim, e pelo seu comentário também não penso para você. Eu não tinha OUTROS arquivos .gitignore escondidos na parte inferior da árvore de diretórios; nada em .git / config; nada em .git / ingore / exclude

Se você ainda tiver o problema, verifique esta resposta . Isso resolveu o problema para mim

Basicamente, verifique se há um arquivo ~ / .gitignore. O meu se chamava ~ / .gitignore_global. Eu não sei quando foi criado ( eu certamente não fazê-lo), mas eu tentei uma tonelada de configuração git diferente é quando eu instalado pela primeira vez, assim que um deles deve ter colocá-lo lá.

Espero que sua resposta ajude você também!

Bukov
fonte
1

Outra razão para receber essa mensagem de erro do git é ao executar o git submodule addcomando enquanto um comando git anterior travou e deixou o arquivo de bloqueio (isso pode acontecer, por exemplo, quando você usa scripts personalizados que incluem comandos git e você não notou o batida).

Se git commit, em vez disso, você executar o comando , embora nenhuma das condições tenha mudado ( git submodule addcontinuará gritando que seus .gitignorearquivos são os culpados), você verá outro relatório de erro:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

e de fato excluindo o arquivo de bloqueio:

rm .git/index.lock

resolve o problema. (Isso acontece com o git versão 2.1.0.9736. Pode ser corrigido em versões futuras do git.)

Ger Hobbelt
fonte
Obrigado, esse era o problema que eu estava tendo. Protetor de vida!
JDawgg
1

Verifique se você tem permissão para a pasta. Acabei de me deparar com isso porque a pasta pertencia ao usuário www-data e não ao usuário com o qual eu estava conectado ao terminal.

Conrad Jones
fonte
1

No meu caso, foi a barra no meu caminho que causou o problema ...

Não funciona

/srv/bootstrap/

Trabalhos

srv/bootstrap/
Jwogrady
fonte
1

Mais uma coisa: se o diretório em que você está requer acesso root para escrever ou executar, certifique-se de que você está no usuário root. Na verdade, recebi um erro estranho em que estava tentando adicionar um submódulo e o git reclamava que o caminho para o qual estava clonando estava sendo ignorado por um arquivo git ignore. Então mudei para o usuário root, executei o submódulo add novamente e não houve problema.

Maharlikans
fonte
0

Verifique também ~/.gitignoree ~/.gitignore_globalquais podem ser criados por alguns clientes Git (por exemplo, Atlassian SourceTree no Mac OS X).

Viviansteller
fonte
0

Certifique-se de que o .gitignorearquivo não está se ignorando. Um erro comum é adicionar uma *regra ao .gitignorearquivo para ignorar todos os arquivos da pasta atual. A solução para isso é adicionar uma exceção a .gitignore:

*
!.gitignore

Desta forma, todos os arquivos do diretório serão ignorados, exceto .gitignore.

jfoliveira
fonte