gitignore não ignora a pasta

135

Na raiz do meu projeto, tenho uma foopasta. Dentro da foopasta eu tenho uma barpasta. Gostaria de ignorar todas as alterações em todos os arquivos dentro da minha barpasta. Eu tenho isso no meu gitignore:

/foo/bar

A pasta está marcada: existe e possui os arquivos a serem ignorados. gitignoreé committed. No entanto, tenho um arquivo em que faço uma moificação e está dentro da minha barpasta. Quando digito

git status

dentro do meu git basheu vejo o arquivo que deveria ter sido ignorado. Qual poderia ser o motivo e como posso ignorar com êxito todos os arquivos dentro da minha pasta da barra?

Observe que os arquivos foram ignorados anteriormente com a mesma linha, mas tive que removê-la temporariamente para commitalgo no servidor. Após o commit, coloquei de volta a linha no gitignore. Este foi um tempo atrás, mas agora tenho observado que os arquivos estarão no git status. Eu esperaria poder modificar os arquivos ignorados sem que eles aparecessem no git status.

Lajos Arpad
fonte
No futuro, você não precisará modificar seus ignorantes para adicionar algo ignorado. git add -f ignored-fileadicionará um arquivo mesmo que esteja em sua ignorância.
Chris
O que git status foo/bar/file-that-should-be-ignoreddá?
22614 Chris
O arquivo que deve ser ignorado se ocorrer alguma alteração. Estou obviamente faltando alguma coisa, mas de acordo com o meu conhecimento da lista de git status deve estar vazio, nesse caso, desde que / foo / bar está presente em .gitignore
Lajos Arpad
4
Parece que esse arquivo está sendo rastreado pelo Git. Ele deve ter sido adicionado ao repositório em algum momento. Você pode ver sua história com git log foo/bar/file-that-should-be-ignored. Se não deveria fazer parte do repositório, você deve removê-lo git rm --cached foo/bar/file-that-should-be-ignorede confirmar como sugerido por Reck abaixo (embora eu o faça apenas no arquivo, não na pasta inteira). Isso (a) removerá o arquivo do Git, (b) manterá o arquivo na sua cópia local e (c) fará com que o arquivo seja excluído quando outros fetchou pullo novo commit.
22414 Chris

Respostas:

341

Suponho que esta pasta tenha sido verificada no git antes?

Execute git rm -r --cached <folder>e verifique novamente.

Reck
fonte
3
Isso removerá completamente a pasta do repo (versão atual do). OP quer a pasta para estar lá, mas as novas alterações não devem ser rastreadas
Gareth
Infelizmente eu tenho que remover a aceitação. Esta solução removeu as versões remotas dos arquivos quando enviadas. Quero configurar o gitignore para ignorar todos os arquivos de uma pasta, não para removê-lo do controle remoto. Isso é possível? Eu reverti a solução.
Lajos Arpad
12
git update-index --assume-unchanged <folder>possivelmente?
Reck
3
@Lajos, você não deveria ter corrigido o erro dele em vez de adicionar esse comentário "editar" confuso lá?
Cregox # 15/15
2
@Cawas, como este site é sobre compartilhamento de conhecimento, a resposta é: não. É enganoso aceitar uma resposta que contenha um erro. Isso -r não é opcional.
Lajos Arpad
46

Para mim, a resposta aceita fazia parte da solução, não a solução inteira. Talvez os outros passos que estou prestes a publicar sejam óbvios, mas eu os perdi primeiro. Aqui estão as etapas que eu tomei para garantir que meu .gitignorearquivo ignorasse a pasta que eu queria que ele ignorasse:

  1. Confirme as alterações que você precisa corrigir / alterar.
  2. Execute este comando: git rm -r --cached .(que remove tudo do índice git para atualizar seu repositório git)
  3. Em seguida, execute este comando: git add .(para adicionar tudo de volta ao repositório)
  4. Por fim, confirme essas alterações usando git commit -m ".gitignore Fixed"

Você pode encontrar o link para o artigo de onde encontrei a solução aqui .

sikanderBabwani
fonte
1
Esta não é uma solução viável com base na pergunta original. O @ lagos-arpad perguntou especificamente sobre um subdiretório e não sobre o projeto inteiro. Sua solução remove tudo do nível raiz do repositório git e essa não é uma abordagem recomendada para lidar com esse problema.
justinhartman
Mesmo que seja apenas um subdiretório, esta solução funcionou para mim, pois eu estava lidando com apenas um arquivo. Você pode explicar por que não é recomendado?
precisa saber é o seguinte
1
O que você estava lidando é imaterial. Esta não é a resposta para a pergunta e é potencialmente perigosa, como a outra resposta apontou. Isso remove coisas no repositório remoto que você não necessariamente deseja.
RichieHH
8

Eu estava tendo esse problema e percebi que o git estava realmente ignorando os arquivos / pastas corretamente, mas meu editor de código (Visual Studio Code) estava apenas com bugs e não os "acinzentou" corretamente na barra lateral da interface do usuário. Eu reiniciei o VSCode e eles estavam acinzentados conforme o esperado.

Mark Jackson
fonte
O mesmo aqui: Código VS v1.30.2 (usuário)
xinthose
O mesmo para mim. Muito obrigado por esta solução! Eu queria saber por que meu .gitignore não estava funcionando até que eu tentei reiniciar o VS Code.I'm no Visual Studio Code v1.44.2.
Fritz Lim
6

Como complemento à resposta aceita

git rm -r --cached /foo/bar/
git status

Quando faço isso, o terminal mostra vários rmarquivos nesse diretório. Então, para evitar outro commit que possa afetar desnecessariamente o controle remoto, eu fiz:

git reset HEAD *
git status

Depois disso, ele não disse nada para confirmar e quando eu modifico os arquivos dentro /foo/bar/e faço um git statusque ainda recebo nothing to commit.

learnsomemore
fonte
1
Isso apenas me
leva de