Gitignore não está funcionando

276

Meu .gitignorearquivo não está funcionando por algum motivo e nenhuma quantidade de Googling foi capaz de corrigi-lo. Aqui está o que eu tenho:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

Está no diretório master, que é o meu repositório git. Estou executando o Git 1.8.4.2 porque estou em um MacBook executando o OSX 10.8.6.

user3280133
fonte
4
1. Quais arquivos são indexados, embora não devam? 2. você adicionou o .gitignore depois de adicionar esses arquivos ao repositório?
Ahmad
2
@ Ahmad Em vários projetos, a /bin/pasta ainda mostra quando eu faço um git status. Eu não mudei esses arquivos desde que adicionei o.gitignore
user3280133
1
"desde que eu adicionei o .gitignore" - então você adicionou o .gitignore depois de adicionar os arquivos?
Ahmad
3
possível duplicata de .gitignore não funciona
Liam

Respostas:

687

Os arquivos / pasta no seu controle de versão não serão excluídos apenas porque você os adicionou ao arquivo .gitignore. Eles já estão no repositório e você deve removê-los. Você pode fazer isso com isso:

( Lembre-se de confirmar tudo o que você mudou antes de fazer isso. )

git rm -rf --cached .
git add .

Isso remove todos os arquivos do repositório e os adiciona novamente (desta vez respeitando as regras no seu .gitignore).

Ahmad
fonte
2
ou você pode apenas tentar reverter os arquivos / pastas que você adicionou ao .gitignore usando git checkout folder_to_ignore / *
Zahra
1
@Verde, mas isso não funcionaria se já tiverem sido confirmados, só funcionaria se tiverem sido encenados, o que no caso de a pasta já estar no .gitignore não deve acontecer (a menos que você force a adição) :)
Ahmad
1
não funciona para mim quando pressiono as alterações no github. Diz que tudo está atualizado !!!!
Dr. Younes Henni
1
Desculpe Ahmed, resolvi o problema excluindo o arquivo gitignore e puxando e empurrando novamente para o repositório remoto. Não lembro mais o que dizia quando digito status git. Meu problema foi corrigido. Muito obrigado.
Dr. Younes Henni
3
Eu acho que é melhor o git adicionar um comando 'git ignore' para simplificar isso. Assim, poderíamos usar git ignore path/filea qualquer momento.
Tiw
123

Para rastrear um único arquivo que já foi adicionado / inicializado ao seu repositório, ou seja, pare de rastrear o arquivo, mas não o exclua do sistema: git rm --cached filename

Para rastrear todos os arquivos que estão agora no seu .gitignore:

Primeiro confirme as alterações de código pendentes e, em seguida, execute este comando:

git rm -r --cached .

Isso remove todos os arquivos alterados do índice (área de preparação) e, em seguida, basta executar:

git add .

Confirme:

git commit -m ".gitignore is now working"
Nicolas
fonte
Certifique-se de mesclar suas ramificações novamente para dominar ou mover o ponteiro, porque quando tentei, perdi as duas ramificações de recursos. Felizmente, não perdi nenhum trabalho, todas as minhas atualizações mais recentes do ramo de trabalho foram redefinidas para o ramo mestre, mas, dependendo da configuração, esse comportamento pode ser indesejável.
quer
Como você usaria esse comando para remover uma pasta do cache em vez de um arquivo?
RealMJDev
15

Depois de descer um pouco da toca de um coelho tentando seguir as respostas para essa pergunta (talvez porque eu precisei fazer isso em um projeto de visual studio), achei o caminho mais fácil

  1. Recortar e colar os arquivos que não quero mais rastrear em um local temporário

  2. Confirme a "exclusão" desses arquivos

  3. Confirmar uma modificação no .gitignorepara excluir os arquivos que eu havia movido temporariamente

  4. Mova os arquivos de volta para a pasta.

Eu achei que essa era a maneira mais direta de fazer isso (pelo menos em um estúdio visual, ou eu assumiria outro ambiente baseado em heave IDE, como o Android Studio), sem acidentalmente me dar um tiro no pé com uma penetração bastante ampla git rm -rf --cached ., após o que o projeto do visual studio em que eu estava trabalhando não foi carregado.

Garrett Simpson
fonte
2
Eu gosto bastante dessa abordagem - parece menos destrutiva, mesmo que não seja considerada "adequada".
theyetiman
6

No meu caso, era um espaço em branco no início do arquivo que aparecia claramente quando eu abri o arquivo no Bloco de Notas, não era óbvio no Código do Visual Studio.

S Saad
fonte
4

Eu usei algo para gerar algo comum .gitignorepara mim e me deparei com isso. Depois de ler a resposta @Ozesh, abri no VS Code porque ele tem um bom indicador no canto inferior direito, mostrando o tipo de final de linha. Foi LF, então eu converti para CRLF, conforme sugerido, mas sem dados.

Então olhei ao lado das terminações da linha e notei que elas foram salvas usando o UTF16. Então eu salvei novamente usando a codificação UTF8 de um voila, funcionou. Eu não acho que o CRLF importava, então mudei de volta para LF para ter certeza e ainda funcionava.

É claro que isso não era problema dos OPs, pois ele já havia confirmado os arquivos para que eles já estivessem indexados, mas achou que eu compartilharia caso alguém tropeçasse nisso.

TLDR ; Se você ainda não confirmou os arquivos e o .gitignore ainda não está sendo respeitado, verifique a codificação dos arquivos e verifique se o UTF8 é o UTF8 e, se isso não funcionar, tente mexer nas terminações das linhas.

DeezCashews
fonte
1
UTF16 foi o culpado por mim. Código VS aberto> abriu .gitignore> abriu o prompt de comando> "Alterar codificação de arquivo"> ​​"UTF-8"> Salvar arquivo
Michael
3

No meu caso, os espaços em branco no final das linhas de .gitignore foram a causa. Portanto, cuidado com os espaços em branco no .gitignore!

026
fonte
2

Resolvi meu problema fazendo o seguinte:

Primeiro de tudo, eu sou um usuário do Windows, mas já enfrentei um problema semelhante. Então, eu estou postando minha solução aqui.

Há uma simples razão pela qual, às vezes, o .gitignore não funciona como deveria. Isso ocorre devido ao comportamento de conversão da EOL.

Aqui está uma solução rápida para isso

Editar> Conversão de EOL> Formato do Windows> Salvar

Você pode culpar suas configurações do editor de texto por isso.

Por exemplo:

Como sou desenvolvedor do Windows, normalmente uso o Notepad ++ para editar meu texto, diferentemente dos usuários do Vim.

Então, o que acontece é que, quando abro meu arquivo .gitignore usando o Notepad ++, ele se parece com isso:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Se eu abrir o mesmo arquivo usando o bloco de notas padrão, é isso que recebo

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Portanto, você já deve ter adivinhado olhando a saída. Tudo no .gitignore se tornou uma linha única e, como existe um ## no início, ele age como se tudo estivesse comentado.

A maneira de corrigir isso é simples: basta abrir o arquivo .gitignore com o Notepad ++ e faça o seguinte

Editar> Conversão de EOL> Formato do Windows> Salvar

Na próxima vez que você abrir o mesmo arquivo com o bloco de notas padrão do Windows, tudo deverá estar formatado corretamente. Experimente e veja se isso funciona para você.

Ozesh
fonte
1

Além disso, os comentários devem estar em sua própria linha. Eles não podem ser colocados após uma entrada. Portanto, isso não vai funcionar:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Mas isso vai funcionar:

# fine to comment here
/node_modules
Ben Pritchard
fonte
0

Funciona git reset --hardpara alguém? Não estou dizendo que essa é uma boa solução, apenas parecia funcionar da primeira vez que tentei.

user1889992
fonte
Por favor, ignore meu comentário acima. Alguém no trabalho fez algo tão errado no Git que causou pastas duplicadas e eu não estava ciente por um bom tempo. Obrigado.
user1889992
0

Cometi o grande erro de editar meu dockerignore, funcionou muito bem depois que encontrei o arquivo ignorar certo: p


fonte
0

Adicionando minha parte, já que essa é uma pergunta popular.

Não consegui colocar o diretório .history dentro do .gitignore, porque não importa qual combinação eu tentei, simplesmente não funcionou. O Windows continua gerando novos arquivos a cada salvamento e não quero vê-los.

insira a descrição da imagem aqui

Mas então percebi que este é apenas o meu ambiente de desenvolvimento pessoal na minha máquina. Coisas como .history ou .vscode são específicas para mim, portanto, seria estranho se todos incluíssem suas próprias entradas .gitignore com base no IDE ou SO que estão usando.

Então, isso funcionou para mim, basta acrescentar ".history" a .git / info / exclude

echo ".history" >> .git/info/exclude
Daniel Katz
fonte