Meu .gitignore
arquivo parece estar sendo ignorado pelo Git - o .gitignore
arquivo pode estar corrompido? Que formato de arquivo, local ou cultura o Git espera?
Meu .gitignore
:
# This is a comment
debug.log
nbproject/
Saída de git status
:
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# debug.log
# nbproject/
nothing added to commit but untracked files present (use "git add" to track)
Eu gostaria debug.log
e nbproject/
não aparecesse na lista de arquivos não rastreados.
Onde devo começar a procurar corrigir isso?
.gitignore
arquivo usaANSI
ouUTF-8
codifica. Se ele usa algo maisUnicode BOM
, é possível que o Git não consiga ler o arquivo.echo "file" > .gitignore
no PowerShell, o arquivo tinha uma codificação UCS-2!git rm --cached debug.log nbproject/
Respostas:
Mesmo que você não tenha rastreado os arquivos até agora, o Git parece ser capaz de "conhecê-los" mesmo depois de adicioná-los
.gitignore
.AVISO: primeiro confirme suas alterações atuais ou você as perderá.
Em seguida, execute os seguintes comandos na pasta superior do seu repositório Git:
fonte
Se parece que o Git não está percebendo as alterações feitas no seu
.gitignore
arquivo, convém verificar os seguintes pontos:.gitignore
arquivo global que possa interferir no seu localQuando você adiciona algo a um arquivo .gitignore, tente o seguinte:
Se você remover algo de um arquivo .gitignore, e as etapas acima talvez não funcionarem, se você achou que as etapas acima não estão funcionando, tente o seguinte :
fonte
git rm -r --cached .
trabalhou para mimFixo. OK, criei o arquivo .gitignore no bloco de notas no Windows e ele não estava funcionando. Quando eu vi o arquivo .gitignore no Linux, ele parecia uma bobagem organizada - talvez o Bloco de Notas tenha escrito Unicode em vez de ASCII ou seja o que for de 8 bits.
Então, eu reescrevi o arquivo na minha caixa Linux e, quando o puxei de volta para o Windows, ele funcionou bem! Viva!
fonte
Sem adicionar outro commit ao seu projeto, uma linha será suficiente para fazer o
.gitignore
trabalho como deveria:Isso os removerá do repositório, mas ainda os manterá fisicamente. Em inglês simples, ele exclui qualquer histórico de alterações relacionadas a eles e também não rastreará suas alterações em nenhum commit futuro. Você pode encontrar uma explicação melhor aqui .
fonte
git rm -r --cached someFile.php
e funcionou como um encanto :)Outra causa desse problema são espaços em branco ou guias antes da declaração:
Exemplo:
E, como apontado pelo comentário abaixo, um espaço à direita também pode ser um problema:
fonte
*.txt # Tex files
. Mas o git entende: "Ignore os arquivos com a extensãotxt
"Notei que a codificação do
.gitignore
estava tendo efeito - se o arquivo era Unicode, era ignorado, se era ASCII, não era.Processo:
PS> git status
.gitignore
Codificação do teste :PS> Get-FileEncoding .gitignore
PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
PS> git status
fonte
touch .gitignore
eecho ".db" >> .gitignore
via powershell. Eu descobri queecho ".db" >> .gitignore"
estava definindo a codificação do arquivo para UCS-2 LE-BOM, uma conversão rápida para ASCII e o gitignore começaram a funcionar.Tal como acontece com as outras soluções, comprometer em primeiro lugar e estar ciente de que você vai perder todas as alterações un-comprometido.
Eu tive melhores resultados com isso:
Observe que o status não deve ter nenhum arquivo modificado agora.
fonte
No meu caso, é porque os arquivos já existem no repositório e estou tentando ignorá-lo.
Estas são as coisas que eu fiz para corrigir o problema:
Até então, todas as alterações feitas nesses arquivos eram ignoradas.
Eu acho que você não pode ignorar arquivos que já existem no repositório.
fonte
Todas as respostas aqui são realmente soluções alternativas. Você precisa criar o arquivo .gitignore antes de executar
git init
. Caso contrário,git
você nunca saberá que precisa ignorar esses arquivos, porque eles já foram rastreados.Se você desenvolver diariamente, recomendamos que você adicione seus arquivos ignorados habituais ao seu
~/.gitignore_global
arquivo. Dessa forma,git
você já saberá quais arquivos você (que significa "seu usuário", já que é um arquivo no diretório inicial) geralmente ignora.fonte
~/.gitignore_global
é um nome configurável. Executegit config --global core.excludesfile
primeiro para ver se você já possui um arquivo definido. Caso contrário, corragit config --global core.excludesfile ~/.gitignore_global
..gitignore
primeiro: renomeie o arquivo rastreado..gitignore
será aplicado como se fosse novo.Verifique também o diretório em que você colocou
.gitignore
.Deve estar na raiz do seu projeto :
Não em
fonte
Especificamente para usuários do Windows: Se você tiver arquivos não rastreados e a limpeza / remoção dos arquivos em cache não estiver funcionando. Tente abrir o PowerShell e converter o arquivo .gitignore em codificação UTF-8:
Você só precisa fazer isso uma vez para codificar o arquivo .gitignore para esse diretório e, como o arquivo é codificado corretamente, sempre que você editar o arquivo no futuro, ele deverá funcionar. Eu acredito que isso se deve a uma falha no GitHub não estar prestes a ler a codificação não UTF-8 para um arquivo .gitignore. Tanto quanto sei, esse problema ainda não foi resolvido para o Windows. Não é grande coisa, apenas uma dor para depurar quando não está funcionando.
fonte
Há outro problema
.gitignore
que pode acontecer, especialmente para um usuário do Windows. O Git não gosta quando você nomeia.gitignore
(comounity.gitignore
).Você sempre desejará nomeá-lo
.gitignore
ou no Windows,.gitignore.
pois o Windows pensa que está tentando renomeá-lo sem um nome de arquivo.fonte
Acabei de encontrar este problema. O conteúdo do meu arquivo .gitignore continuou a aparecer na lista de arquivos não rastreados.
Eu estava usando isso para criar o arquivo ignorar:
Acontece que as aspas duplas estavam causando o problema para mim. Excluí o arquivo ignorar e, em seguida, usei o comando novamente sem aspas, e funcionou conforme o esperado. Eu não precisava mexer com a codificação do arquivo. Estou em uma máquina Windows 10 usando o Cmder .
Exemplo:
fonte
Para mim, nenhuma das respostas anteriores funcionou. Eu tive que copiar o
.gitignore
texto noexclude.txt
arquivo encontrado emUma vez feito, atualize suas alterações e todos os arquivos não rastreados desaparecerão. Confirme como de costume.
fonte
Meu problema foi (como sugerido pelo OP) um arquivo .gitignore corrompido. Eu não acreditava nisso e ignorei a possibilidade até que todo o resto falhasse. A corrupção não apareceu
vi
, mas havia dois bytes no início do arquivo que fizeram com que o arquivo .gitignore fosse ignorado. Para mim, eles só apareceram quando eu digiteicat .gitignore
, o que mostrou:Não tenho idéia de como eles foram parar lá, mas a recriação do arquivo corrigiu o problema. Uma análise hexadecimal do arquivo corrompido mostrou o seguinte:
fonte
Eu tive esse problema, com um arquivo .gitignore contendo esta linha:
Acabei de perceber que, de fato, este diretório é um link simbólico para uma pasta em outro lugar:
Na linha
lib/ext/
, o Git realmente procura uma pasta , mas um link simbólico é um arquivo , então meulib
pasta não é ignorada.Eu reparei isso substituindo
lib/ext/
porlib/ext
no meu arquivo .gitignore.fonte
Eu tenho esse mesmo problema. Acredito que o problema foi uma discrepância CR vs. CR + LF. Eu escondi coisas no meu .gitignore usando o CMD (no Windows 7) e o seguinte comando:
Ruim:
Etc.
O problema foi que esse comando não coloca o marcador de fim de linha correto para o Git reconhecer as novas linhas (CR ou CR + LF quando o Git espera o outro). Resolvi o problema substituindo manualmente cada nova linha no Vim (Vim para o resgate!) E funcionou perfeitamente.
Tente editar o seu .gitignore no Notepad ++ ou Vim (idealmente). Mesmo que o arquivo pareça estar formatado corretamente, tente substituir as novas linhas. Parece estranho, eu sei, mas funcionou para mim. : D
fonte
OK, então no meu caso a solução aceita não funcionou e o que funcionou é descrito aqui:
O Visual Studio 2013 está ignorando o seu arquivo .gitignore?
Em resumo:
ms-persist.xml
fonte
Uma coisa a considerar: você está salvando o arquivo .gitignore com as terminações de linha corretas?
Janelas:
Se você o está usando no Windows, está salvando-o com finais de linha do Windows? Nem todos os programas farão isso por padrão; O Notepad ++ e muitos editores de PHP usam como padrão as terminações de linha do Linux, para que os arquivos sejam compatíveis com o servidor. Uma maneira fácil de verificar isso é abrir o arquivo no Windows Notepad. Se tudo aparecer em uma linha, o arquivo foi salvo com as terminações de linha do Linux.
Linux:
Se você estiver tendo problemas com o arquivo funcionando em um ambiente Linux, abra o arquivo em um editor como o Emacs ou o nano . Se você vir algum caractere não imprimível, o arquivo foi salvo com as terminações de linha do Windows.
fonte
Outro motivo possível - algumas instâncias de clientes Git em execução ao mesmo tempo . Por exemplo, "git shell" + "GitHub Desktop" etc.
Isso aconteceu comigo. Eu estava usando o "GitHub Desktop" como cliente principal e estava ignorando algumas novas configurações do .gitignore: commit após commit:
Motivo : o editor de código do Visual Studio estava sendo executado em segundo plano com o mesmo repositório aberto. O Código do Visual Studio possui controle Git interno, o que gera alguns conflitos.
Solução : verifique novamente vários clientes Git ocultos e use apenas um cliente Git por vez, especialmente ao limpar o cache do Git.
fonte
Já existem ótimas respostas, mas minha situação era entediante. Eu editei a fonte de um software PLM (gerenciamento do ciclo de vida do produto) instalado no Win10 e depois decidi: "Eu provavelmente deveria ter feito disso um repositório git".
Portanto, a opção de cache não funcionará diretamente para mim. Postando para outras pessoas que podem ter adicionado o controle de origem APÓS fazer um monte de trabalho inicial E
.gitignore
não funcionar, MAS, você pode ter medo de perder um monte de trabalho,git rm --cached
não é para você.!IMPORTANTE: Isso porque eu adicionei o git tarde demais a um "projeto" muito grande e parece ignorar o meu .gitignore. Eu nunca comprometo, nunca. Eu posso me afastar com isso :)
Primeiro, acabei de fazer:
Então, eu tive que ter uma foto das minhas alterações. Novamente, este é um produto de instalação em que eu fiz alterações. Tarde demais para um primeiro commit do branch master puro. Então, eu precisava de uma lista do que alterei desde que instalei o programa adicionando
> changed.log
um dos seguintes:PowerShell
Bater
Agora, tenho minha lista do que mudei nos últimos dez dias (não vamos entrar nas melhores práticas aqui além de dizer: sim, eu fiz isso comigo mesmo).
Para um novo começo, agora:
Eu tive que comparar minha lista alterada com meu .gitignore crescente, executando
git status
conforme eu a , mas minhas edições no .gitignore são lidas à medida que eu passo.Finalmente, eu tenho a lista de alterações desejadas! No meu caso, é clichê - alguns temas funcionam junto com sever xml configs específicas para executar um sistema de desenvolvimento nesse software que eu quero colocar em um repositório para outros desenvolvedores aproveitarem e contribuírem ... Este será nosso ramo principal, então comprometendo, pressionando e, finalmente, SUBSTITUINDO novos trabalhos!
fonte
Apenas remova a pasta ou o arquivo confirmado anteriormente no Git, pelo seguinte comando. O arquivo gitignore refletirá os arquivos corretos.
fonte
Uma coisa complicada não abordada pelas outras respostas aqui é que o arquivo .gitignore não funcionará se você tiver comentários embutidos, como este:
Portanto, se você tiver comentários como esse, altere-os assim:
fonte
Também é possível que você tenha editado o
.gitignore
arquivo com umsudo
comando. Encontrei o mesmo problema e ao executar os comandos:git status
:, ainda conseguia ver os arquivos "deveriam ser ignorados".Ao editar com em
nano .gitignore
vez desudo nano .gitignore
, pude ver o reflexo correto.fonte
Eu criei .gitignore usando
echo "..." > .gitignore
no PowerShell no Windows, porque não me permite criá-lo no Windows Explorer.O problema no meu caso foi a codificação do arquivo criado e o problema foi resolvido depois que eu o alterei para ANSI.
fonte
Eu também tenho o mesmo problema no Ubuntu, criei o a
.gitignore
partir do terminal e funciona para mimtouch .gitignore
fonte
O meu não estava funcionando porque eu literalmente criei um documento de texto chamado .gitignore
Em vez disso, crie um documento de texto, abra-o no Notepad ++ e salve como .gitignore
Certifique-se de escolher Todos os tipos (*. *) Na lista suspensa ao salvá-la.
Ou no gitbash, basta usar
touch .gitignore
fonte
Se você é um usuário do Notepad ++ , tente fazer o seguinte:
Abra o arquivo .gitignore usando o Notepad ++ e faça:
Menu Editar → Conversão de EOL → Formato do Windows → Salvar .
Tente usar
git status
novamente e veja se funciona para você.Eu postei a resposta para uma pergunta semelhante aqui .
fonte
Para mim, era outro problema. Meu arquivo .gitignore está configurado para ignorar tudo, exceto coisas que eu digo para não ignorar. Assim:
Agora, obviamente, isso significa que também estou dizendo ao Git para ignorar o próprio arquivo .gitignore. O que não foi um problema, desde que eu não estivesse rastreando o arquivo .gitignore. Mas em algum momento eu comprometi o próprio arquivo .gitignore. Isso levou o arquivo .gitignore a ser ignorado corretamente.
Então, adicionando mais uma linha, foi corrigida:
fonte
Meu problema foi que anotei arquivos para ignorar com aspas "" a separação e não com a barra /.
Isso não funcionou e foi ignorado pelo git:
Isso funcionou muito bem:
Também verifiquei minha codificação de arquivos no Windows com o Notepad ++. A codificação foi definida como UTF-8.
fonte