Como ignorar certos arquivos no Git

731

Eu tenho um repositório com um arquivo Hello.java,. Quando eu o compilo, um Hello.classarquivo adicional é gerado.

Eu criei uma entrada para Hello.classem um .gitignorearquivo. No entanto, o arquivo ainda parece ser rastreado.

Como posso fazer o Git ignorar Hello.class?

Kohan95
fonte
8
O que você quer dizer com "isso não funciona"? Você talvez já tenha adicionado o Hello.class ao seu repositório? os gitignores não afetam o conteúdo que já é rastreado. Veja por exemplo stackoverflow.com/questions/1139762/gitignore-file-not-ignoring
Cascabel

Respostas:

810

O problema é que .gitignoreignora apenas arquivos que não foram rastreados antes (por git add). Execute git reset name_of_filepara desestabilizar o arquivo e mantê-lo. Caso deseje também remover o arquivo fornecido do repositório (após pressionar), use git rm --cached name_of_file.

Ondrej Slinták
fonte
190
O comando git rm --cached name_of_fileremoverá o arquivo do seu repositório git. Mesmo se você adicioná-lo ao seu arquivo .gitignore. Isso não é ignorar que está excluindo.
OrwellHindenberg
4
O que parece ser o que o OP queria neste caso.
Ondrej Slinták 23/03
40
Estou feliz que sua solução funcionou para @ Kohan95! Embora essa pergunta deva ser renomeada com base na resposta selecionada. Meus comentários são apenas um aviso para desenvolvedores que podem não estar cientes do que o comando faz.
OrwellHindenberg
91
git reset name_of_fileremove o rastreamento e não exclui o arquivo.
precisa saber é o seguinte
7
Tentei git rm --cached <name_of_file> Ele excluiu o arquivo no repositório, mas como estava no arquivo .gitignore, a cópia local não foi excluída. Como observação adicional, para adicionar um diretório, é necessário inseri-lo com uma barra '/' à direita. Eu estava removendo o diretório de configuração do Rubymine em um projeto ruby ​​que alguém fez check-in, que era ".idea". No arquivo eu coloquei ".idea /" e depois 'git rm -r --cached .idea' para remover o diretório e tudo sob ele (porque git apenas arquivos de versões, não diretórios.)
Doug Noel
222

Como ignorar novos arquivos

Globalmente

Adicione o (s) caminho (s) ao (s) arquivo (s) que você gostaria de ignorar .gitignore(e confirme). Essas entradas de arquivo também se aplicam a outras pessoas que fazem check-out no repositório.

Localmente

Adicione o (s) caminho (s) ao (s) arquivo (s) que você gostaria de ignorar no seu .git/info/excludearquivo. Essas entradas de arquivo serão aplicadas apenas à sua cópia de trabalho local.

Como ignorar arquivos alterados (temporariamente)

Para ignorar os arquivos alterados para serem listados como modificados, você pode usar o seguinte comando git:

git update-index --assume-unchanged <file>

Para reverter essa ignorância, use o seguinte comando:

git update-index --no-assume-unchanged <file>
Xman Classical
fonte
Perfeito para impedir que um arquivo contendo uma chave api atual seja empurrado para o github!
Jim No Texas
1
@Xman Por que você disse que é temporariamente? Eu fiz as etapas que você mencionou para o localgit ignore e reiniciei o sistema, ele ainda mostra o trabalho diretamente limpo.
Vivek Vardhan
1
Obrigado pelo update-indextruque útil , absolutamente perfeito para evitar a alteração de um .gitignorearquivo, que é então rastreado pelo Git!
Thomas P.
@mcbjam Não existe um comando especial para o git ignore. Edite um arquivo .gitignore localizado no local apropriado na cópia de trabalho. Você deve adicionar esse .gitignore e confirmar. Todos os que clonarem esse repositório terão esses arquivos ignorados.
Xman Classical
@Vivek Vardhan git update-index --assume-inalterado é como uma máscara temporária no índice. Ele permanecerá em vigor até você desligá-lo. Para tornar meu argumento mais claro, o índice inicialmente (ou seja, logo após o git read-tree) "contém" todos os arquivos do tree-ish que acabaram de ser lidos. Portanto, fazer o Git "fechar os olhos" para uma entrada de índice não é igual a removê-la.
Xman Classical
150

Adicione a seguinte linha ao .gitignore:

/Hello.class

Isso excluirá o Hello.class do git. Se você já o confirmou, execute o seguinte comando:

git rm Hello.class

Se você deseja excluir todos os arquivos de classe do git, adicione a seguinte linha ao .gitignore:

*.class
Armand
fonte
32
Adicionar Hello.classa .gitignoreignora qualquer arquivo chamado Hello.classem qualquer subdiretório. Se você pretende ignorar apenas o arquivo Hello.classno mesmo diretório que o .gitignorearquivo, use uma /Hello.classlinha.
Ndim
Onde você coloca o .gitignorearquivo?
CodyBugstein
6
@Irmay, você pode colocar .gitignoreem qualquer lugar do projeto git - se um caminho começar /, será relativo ao local do .gitignorearquivo; caso contrário, ele se referirá recursivamente aos arquivos no diretório atual e seus diretórios descendentes.
Armand #
109

1) Crie um .gitignorearquivo. Para fazer isso, basta criar um .txtarquivo e alterar a extensão da seguinte maneira:

Digite a descrição da imagem aqui

Então você precisa alterar o nome, escrevendo a seguinte linha em uma janela do cmd:

 rename git.txt .gitignore

Onde git.txtestá o nome do arquivo que você acabou de criar.

Em seguida, você pode abrir o arquivo e gravar todos os arquivos que não deseja adicionar no repositório. Por exemplo, o meu fica assim:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

Depois de ter isso, você precisará adicioná-lo ao seu repositório Git. Você precisa salvar o arquivo onde está seu repositório.

Então, no Git Bash, você deve escrever a seguinte linha:

git config --global core.excludesfile ~/.gitignore_global

Se o repositório já existir, você deverá fazer o seguinte:

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

Se a etapa 2 não funcionar, você deve escrever a rota inteira dos arquivos que deseja adicionar.

SomeAnonymousPerson
fonte
Você pode usar o comando "copy con .gitignore" no prompt e pressionar CTRL + Z para criar diretamente o arquivo sem o Windows Explorer.
Heringer
61

Ignorar:

git update-index --assume-unchanged <path/to/file>

Para desfazer ignorar:

git update-index --no-assume-unchanged <path/to/file>
avj
fonte
6
Eu gostaria que isso seja topo da tabela como solução para o problema .... É muito simples e elegante
user1457958
"É muito simples e elegante" - na verdade : 'Assume que inalterado não deve ser abusado por um mecanismo de ignorar. É "Eu sei que minhas operações do sistema de arquivos são lentos. Prometo Git que não vai alterar esses caminhos ..." Especialmente, é não uma promessa ... que Git sempre considerar esses caminhos são não modificada-se Git pode determinar um caminho ... mudou sem incorrer em lstat(2)custos adicionais , reserva-se o direito de informar que o caminho foi modificado (... git commit -aé livre para confirmar essa alteração). '
Chris
47

Você pode usar os métodos abaixo para ignorar / não ignorar alterações nos arquivos rastreados.

  1. Para ignorar: git update-index --assume-unchanged <file>
  2. Para reverter arquivos ignorados: git update-index --no-assume-unchanged <file>
kapillohakare
fonte
4
Isso se aplica a todos os arquivos? Não está claro como esses comandos podem ser aplicados a apenas um único arquivo para ignorá-lo / ignorá-lo.
Javadba
@kapil finalmente !! algo que realmente funciona entre um trilhão de variações de comando git! Tentei todas as respostas para ignorar alguns arquivos idiotas do build.xml que continuavam aparecendo após cada compilação ... obrigado!
killjoy
1
Por favor, não : 'Assuma que inalterado não deve ser abusado por um mecanismo de ignorar. É "Eu sei que minhas operações do sistema de arquivos são lentos. Prometo Git que não vai alterar esses caminhos ..." Especialmente, é não uma promessa ... que Git sempre considerar esses caminhos são não modificada-se Git pode determinar um caminho ... mudou sem incorrer em lstat(2)custos adicionais , reserva-se o direito de informar que o caminho foi modificado (... git commit -aé livre para confirmar essa alteração). '
Chris
22

Crie um .gitignoreno diretório em que .git está. Você pode listar arquivos separados por uma nova linha. Você também pode usar curingas:

*.o
.*.swp
terminus
fonte
3
É uma boa prática evitar colocar padrões específicos da ferramenta (ou seja, seus arquivos temporários do Vim) em .gitignorearquivos (a menos que essa ferramenta seja obrigatória pelo projeto). Você pode colocar padrões para suas ferramentas favoritas no arquivo exclui por usuário (conjunto core.excludesFile); eles funcionarão em todos os seus repositórios. Por exemplo git config --global core.excludesFile "$HOME/.git-user-excludes", coloque-os nesse arquivo.
precisa
@ Chris: Obrigado pela dica. Mas eu só escrevi lá porque nada melhor veio à minha mente :)
terminal
1
@ChrisJohnsen 'tool specific?' para vim ?? eu acho que é seguro para excluir arquivos de swap vim ..
javadba
16

No site oficial do GitHub:

Se você já possui um arquivo registrado e deseja ignorá-lo, o Git não o ignorará se você adicionar uma regra posteriormente. Nesses casos, você deve rastrear o arquivo primeiro, executando o seguinte comando no seu terminal:

git rm --cached FILENAME

ou

git rm --cached .
Mile Mijatović
fonte
12

Você deve escrever algo como

*.class

no seu .gitignorearquivo.

KingCrunch
fonte
4
@AgentZebra Você deve adicionar uma entrada *.classao seu .gitignorepara que o git ignore todos os arquivos que terminam em .class.
KingCrunch
7

Adicione quais arquivos você deseja ignorar no arquivo .gitignore:

*.classe

* .projects

* .prefs

*.projeto

Chinmoy
fonte
5

Se você já confirmou o arquivo e está tentando ignorá-lo adicionando ao .gitignorearquivo, o Git não o ignorará. Para isso, primeiro você deve fazer o seguinte:

git rm --cached FILENAME

Se você está iniciando o projeto recentemente e deseja adicionar alguns arquivos ao Git ignore, siga as etapas abaixo para criar um arquivo Git ignore:

  1. Navegue para o seu repositório Git.
  2. Digite "touch .gitignore" que criará um .gitignorearquivo.
Savyasachi
fonte
3

Você também pode usar atributos .gitat (em vez de .gitignore) para excluir tipos de arquivos inteiros. O arquivo é bastante auto-explicativo, mas estou colando o conteúdo aqui para referência. Preste atenção na última linha (* .class binário):

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary
David Niki
fonte
2

Adicione a seguinte linha ao .git / info / exclude:
Hello.class

Dado
fonte
Você deveria alterar os arquivos dentro da pasta .git?
Peter Mortensen
Talvez não seja uma boa ideia tocar esses arquivos em .git manualmente.
mgyky 10/04
2

Esta página da web pode ser útil e economizar tempo ao trabalhar com .gitignore.

Ele gera automaticamente arquivos .gitignore para diferentes IDEs e sistemas operacionais com os arquivos / pastas específicos que você normalmente não deseja extrair para o repositório Git (por exemplo, pastas específicas do IDE e arquivos de configuração).

Jaime Caffarel
fonte
1

Eu tentei isso -

  1. listar arquivos que queremos ignorar

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. Copie o conteúdo da etapa 1 e anexe-o ao arquivo .gitignore.

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. Validar

git status .gitignore

Da mesma forma, podemos adicionar o diretório e todos os seus subdiretórios / arquivos que queremos ignorar no status git usando directoryname/*e executei esse comando a partir do srcdiretório

VIPIN KUMAR
fonte
1
  1. Vá para o arquivo .gitignore e adicione a entrada para os arquivos que você deseja ignorar
  2. Corre git rm -r --cached .
  3. Agora corra git add .
Rahul Garg
fonte
0

Eu tentei oe --assume-unchangedtambém o.gitignore mas nem funcionou bem. Eles dificultam a troca de ramificações e a mesclagem de mudanças de outras pessoas. Esta é a minha solução:

Ao confirmar , removo manualmente os arquivos da lista de alterações

Antes de puxar , escondo os arquivos alterados. E depois de puxar, eu faço um stash pop .

  1. esconderijo
  2. puxão
  3. git stash pop

Às vezes, a Etapa 3 aciona uma mesclagem e pode resultar em conflito que você precisa resolver, o que é uma coisa boa.

Isso me permite manter alterações locais que não são compartilhadas com outras pessoas da equipe.

John Henckel
fonte