Mantenha os arquivos ignorados fora do status do git


133

Gostaria de impedir que o Git mostrasse arquivos ignorados git status, porque ter toneladas de documentação e arquivos de configuração na lista de arquivos alterados, mas não atualizados , torna a lista meio inútil.

É normal que o Git mostre esses arquivos?

Coloquei as informações de ignorar em um .gitignorearquivo no diretório raiz do repositório Git e elas não são adicionadas ao usá- git add .las, mas parece que elas também não são totalmente ignoradas, pois são exibidas na lista mencionada acima e não são exibidas na lista impresso por git ls-files --others -i --exclude-standard. Somente os arquivos correspondentes aos padrões são ~/.gitignoreexibidos lá.

Poderia ser porque, em um estágio anterior, eu não os ignorei e eles foram comprometidos pelo menos uma vez?

Respostas:


231

Como encontrei neste post , .gitignorefunciona apenas para arquivos não rastreados. Se você adicionou arquivos ao repositório, pode:

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

ou removê-los do repositório

git rm --cached <file>

Editar

Este artigo explica que também


4
update-index funcionou para mim. Problema semelhante em que o status do git está mostrando arquivos ignorados ... muito irritante. +1
Abe Petrillo

3
Eu ainda tenho esse problema. Nenhum dos comandos acima funcionou para mim. Nos dois casos, o git diz que não tem conhecimento dos arquivos em questão, mas eles ainda aparecem no status git :(
Cfreak

5
@Cfreak git status -- <file>Mostra "Alterações não preparadas para confirmação" ou "Arquivos não rastreados" para o seu arquivo? O primeiro é se você já possui um arquivo no índice e eu precisaria de mais informações para resolver seu problema (crie uma pergunta separada com as mensagens git mostradas e apenas poste o link no comentário). O posterior é para arquivos que ainda não são rastreados pelo git, mas não estão no .gitignorearquivo e podem ser adicionados livremente ao índice.
MBO

1
@BO - sim, sim. Obrigado! Seu comentário me ajudou a encontrar esta resposta: stackoverflow.com/questions/594757/… que funcionou para mim.
Cfreak

1
Primeira opção funciona como um encanto. Eu já tentei o segundo, e isso causou a preparação dos arquivos como "removidos" e definitivamente não queria isso.
Carrm 10/01

16

Também tive esse problema, provavelmente porque você adicionou seu diretório / arquivos ignorados ao .gitignore depois que eles foram marcados como "a serem rastreados" pelo GIT em um fluxo de confirmação inicial.

Então, você precisa limpar o cache de rastreamento do git da seguinte maneira:

git rm --cached -r [folder/file name]

Uma explicação mais detalhada pode ser lida aqui: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

O comando acima também removeu os restos da pasta / arquivos da sua origem remota do GIT. Portanto, seus repositórios GIT ficam limpos.


11

O problema pode ser que esse arquivo ainda está no cache do git. Para resolver esse problema, é necessário redefinir o cache do git.

Redefina o cache do git. Isso remove tudo do índice.

git rm -r --cached . 

Adicione todos os arquivos novamente:

git add . 

Confirmar:

git commit -m ".gitignore was fixed." 

2

Isso certamente funciona,

git rm --cached -r [folder/file name]


1

Suponho que você não queira adicionar o diretório tmp (Visual Studio Platform)

1- adicione linhas abaixo ao seu arquivo .gitignore local

## ignore tmp
/tmp/
./tmp/

3- faça backup e exclua a pasta tmp localmente. (Faça backup em outro lugar. Por exemplo, desktop?)

4- Confirme as alterações em Local do que Sincronizar em Remoto (por exemplo, github).

Após essas etapas, seu diretório tmp não será carregado novamente.


0

Do man git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Pessoalmente, tenho a tendência de manter arquivos doxygen na minha árvore de origem, então simplesmente o adicionei ao meu .gitignore (que está no diretório mais alto da minha árvore de origem):

docs/*

Espero que ajude.


0

As etapas a seguir funcionam apenas para arquivos não rastreados . Esta informação é aplicável à seguinte configuração:

Platform: linux

Git version: git version 1.8.3.1

Coloque a lista de arquivos a serem ignorados no arquivo "excluir" presente no seguinte local.

<path till .git directory>/.git/info/exclude

Conteúdo inicial do arquivo "excluir"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Conteúdo final do arquivo "excluir"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch

0

De acordo com a resposta aceita, você pode assumir o arquivo inalterado , para que o que você faz na sua máquina local não seja confirmado na sua filial remota.

Algo como git update-index --assume-unchanged src/main/resources/config.properties onde src / main.resources / config.properties é uma amostra do caminho para localizar esse arquivo no seu projeto.

Agora, se você deseja remover o arquivo completamente do seu repositório, poderá usarremove cached como `git rm --cached

Este cenário pode ser aplicável na seguinte situação:

Vamos supor que eu tenha um arquivo onde guardo senhas. Inicialmente, confirmei esse arquivo com detalhes incorretos, apenas para que meus colegas tenham o mesmo arquivo em suas máquinas. No entanto, agora adicionei meus detalhes corretos na minha máquina local. Como impedir que esse arquivo seja acidentalmente confirmado novamente com os detalhes da senha agora corretos?


-1

como isso

git --ignored myfolder

E mostrará o status apenas para minha pasta

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.