Ignorar arquivos modificados (mas não confirmados) no git?

182

Posso dizer ao git para ignorar arquivos modificados (excluídos), mas que não devem ser confirmados?

A situação é que eu tenho um subdiretório no repositório que contém coisas das quais não estou interessado, então excluí-o para evitar que apareça nas conclusões automáticas e similares (no IDE).

Mas agora, se eu adicionar essa pasta ao .gitignore, simplesmente nada muda, todas as coisas são mostradas como excluídas pelo status do git.

Existe uma maneira de fazer o git ignorá-lo de qualquer maneira?

(Como alternativa, como estou usando o git-svn, posso confirmar as alterações no git local e garantir que elas não sejam repassadas ao repositório svn?)

Sam
fonte
em vez de apenas marcá-los como não modificados no índice de recompra, convém removê-los completamente do índice. Portanto, embora você ainda tenha o arquivo em seu diretório de trabalho, o índice de recompra pode ser excluído por completo, e o git nem o verá como já existia. Por favor, veja o link na minha resposta abaixo.
precisa saber é o seguinte

Respostas:

274

verifique a página do manual git-update-index e o bit --assume-inalterado e relacionados.

quando tenho seu problema eu faço isso

git update-index --assume-unchanged dir-im-removing/

ou um arquivo específico

git update-index --assume-unchanged config/database.yml
csmosx
fonte
3
Você pode listar todos os seus arquivos ignorados de alguma forma?
Zitrax
21
Você pode obter os arquivos de volta comgit update-index --no-assume-unchanged config/database.yml
Denis Kniazhev
1
Veja a resposta de Dave L abaixo para obter uma solução mais recente, sem algumas das deficiências de --assume-unchanged.
Ben Challenor
2
É possível adicionar isso ao arquivo de configuração do repositório, em vez de executar este comando manualmente todas as vezes?
Tim Boland
1
Ele aparecerá como modificado para a próxima confirmação? Não quero que seja assumido inalterado para sempre.
Pranav Nandan
41

Uma opção mais nova e melhor é a git update-index --skip-worktreeque não será perdida em uma redefinição forçada ou em uma nova alteração de um pull.

Consulte a página do manual em http://schacon.github.com/git/git-update-index.html

E uma comparação em http://fallengamer.livejournal.com/93321.html

Dave L.
fonte
9
Uma desvantagem a ser observada é que, depois que as modificações de um arquivo são ocultadas skip-worktree, encontrar esses arquivos é um pouco complicado. A única maneira que eu sei é git ls-files -v |grep -v '^H'. Além disso, muitas ferramentas da GUI não conhecem esse recurso e podem produzir erros engraçados se, por exemplo, checkoutfalhar devido a arquivos modificados "ocultos".
fácil
Eu nunca consegui entender QUALQUER arquivo de documentos do git. Portanto, isso não ajuda muito. (Cada arquivo doc pressupõe que você entenda as sutilezas de todos os outros arquivos doc!)
Scott Biggs
7

Use este código

git update-index --assume-unchanged file-name
Sujiraj R
fonte
1
Muito interessante. Eu tenho que usar uma senha no meu projeto maven, mas não quero publicá-la em um repositório git, por isso, coloquei um espaço reservado para ela sem valor nas propriedades locais, confirmo, depois insiro a senha, mas marque o arquivo inalterado com o comando sugerido. Portanto, a senha não é publicada.
Stefano Scarpanti
6

Os arquivos rastreados não podem ser ignorados; portanto, você deverá removê-los do seu índice primeiro. Adicione um .gitignoreque ignore os diretórios que você não deseja, depois exclua-os e remova todos os retardatários git rm --cached.

John Feminella
fonte
1
Hum, eu tento isso, mas então eu tenho todos os arquivos listados como excluídos. Devo confirmar isso e o --cached fará com que ele não seja enviado para controles remotos? Ou eu fiquei sth. errado? O mais importante para mim é não corromper o repositório remoto (svn).
1
Você não pode confirmar nada que não comece no seu índice. git rm - armazena em cache tudo o que você não deseja confirmar e adicione localmente um arquivo .gitignore que contenha "*". Agora, não importa o quanto você adiciona, você nunca verá esses arquivos no seu índice novamente.
31119 John Feminella
Ah, acho que entendi --cached agora .. Ele apenas remove as coisas do índice e deixa a árvore em funcionamento .. Não tenho certeza se estou perdendo alguma coisa, mas AFAIS estou procurando o oposto , removendo-o da árvore de trabalho sem tocar no índice. Ou posso usá-lo de alguma forma?
6

O que eu costumo fazer é

esconderijo

git qualquer outra coisa

esconder git aplicar

git stash clear

Walter
fonte
10
fwiw você também pode 'git stash pop' para fazer os dois últimos de uma vez (embora 'git stash clear' apague todas as entradas stash, se você quiser).
Groxx