Rastreie arquivos do git temporariamente

449

Eu configurei um git local na minha máquina. Quando inicializei o git, adicionei bibliotecas e binários pré-compilados. No entanto, agora durante o meu desenvolvimento, não quero fazer check-in desses arquivos intermitentemente. Não quero remover esses arquivos do repositório. Existe alguma maneira de não acompanhar esses arquivos até que eu complete meu desenvolvimento. (Acho que não posso usar .gitignore, pois funciona apenas para os arquivos que não estão no git. Quero desativar temporariamente o rastreamento de arquivos.)

agent.smith
fonte

Respostas:

722

O git update-index deve fazer o que você deseja

Isso informará ao git que você deseja começar a ignorar as alterações no arquivo
git update-index --assume-unchanged path/to/file

Quando você deseja começar a acompanhar novamente
git update-index --no-assume-unchanged path/to/file

Documentação do Github: update-index

Andy
fonte
3
Finalmente um comando que realmente funciona para meu-dev-arquivo acidentalmente-comprometidos, graças :)
Richard de Wit
15
Por que não git rm -r --cached <file>?
Ehsan
23
@Ehsan, ao que parece git rm --cached, levará à exclusão das cópias locais em outras máquinas, nas quais a mesma ramificação é verificada, na próxima atração. Veja arlocarreon.com/blog/git/… e especialmente a discussão abaixo.
mit
3
Não está funcionando para mim, quando faço alterações no arquivo, ele ainda é adicionado às alterações incluídas. Eu poderia excluir, mas, em algum momento, provavelmente será adicionado acidentalmente.
MrFox
8
assumir-inalterado não foi feito para esse fim. Pode querer ler este segmento
Appy
264

você pode manter seus arquivos não rastreados depois

git rm -r --cached <file>

adicione seus arquivos com

git add -u

eles empurram ou fazem o que quiserem.

cajuuh
fonte
19
Isso é realmente a resposta certa de acordo com: git-scm.com/book/en/v2/...
Ehsan
git rm --cached .DS_Store então ele imprime rm '../.DS_Store'E o arquivo local é excluído ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng
Tenho a resposta aqui stackoverflow.com/questions/6919121/…
Weishi Zeng
4
Esta não é a resposta correta, pois isso removerá o arquivo na fonte. O OP quer ignorar as alterações locais desse arquivo, e não retire de rastreamento para-lo completamente
cjsimon
2
AVISO: ele também removerá os arquivos que você deseja rastrear. A solução é copiar todos os arquivos em algum lugar e copiá-los novamente após a confirmação.
psad
111
git rm --cached

No entanto, você não deve confirmar binários compilados e dependências externas em primeiro lugar. Use uma ferramenta como o Bundler para puxá-los.

Tekkub
fonte
2
Não se esqueça opção -r (recursivo) para diretórios: git rm -r --cached
Anatoliy Shuba
36

Use o seguinte comando para rastrear arquivos

git rm --cached <file path>
Dinesh Vaitage
fonte
7

O git-book menciona isso na seção 2.4: "Desfazendo coisas". Basicamente, o que você precisa fazer é redefinir o estado do índice para alguns arquivos de volta ao estado HEAD, ou seja, o estado do último check-out (ou confirmação). Isso desfaz a preparação do arquivo para o índice atual. O comando para esta tarefa é git reset. [1]

Portanto, o comando que você deve executar é:

git reset HEAD /path/to/file

As versões mais recentes do git (acredito que desde a versão 1.6) dão esse comando (e muito mais) como uma dica ao executar git status. Essas versões são muito fáceis de usar. Uma dica pessoal: se você estiver preparando apenas alguns arquivos, use git add -i. Isso iniciará a ferramenta de teste interativa, o que torna as coisas particularmente fáceis. Além disso, eu recomendo a leitura do livro, pois é muito explícito sobre o uso do git em situações práticas.

[1] http://www.git-scm.com/book

Eric Spreen
fonte
Concordo que git reset [file]é a maneira mais direta de descompactar arquivos.
Spectral
18
desfazer e cancelando o monitoramento são coisas diferentes
Jaime Sangcap
6

Não é uma resposta para a pergunta original. Mas isso pode ajudar alguém.

Para ver as alterações que você fez ( saiba quais arquivos estão marcados como --assume-inalterados )

git ls-files -v

A lista de arquivos resultante terá um prefixo com um caractere (ex: H ou h). Se estiver em minúscula (ou seja, h), o arquivo foi marcado como --assume-inalterado

prime
fonte
5

Suponho que você esteja perguntando como remover TODOS os arquivos da pasta de compilação ou da pasta bin, em vez de selecionar cada arquivo separadamente.

Você pode usar este comando:

git rm -r -f /build\*

Verifique se você está no diretório pai do diretório de construção.
Este comando irá "excluir" recursivamente todos os arquivos que estão na lixeira / ou compilação / pastas. Com a palavra delete, quero dizer que o git fingirá que esses arquivos foram "excluídos" e que não serão rastreados. O git realmente marca esses arquivos no modo de exclusão.

Certifique-se de ter seu .gitignore pronto para as próximas confirmações.
Documentação: git rm

Vraj Pandya
fonte
1

git reset [arquivo]

Retorne o arquivo da área de armazenamento temporário para o diretório de trabalho

Costumo esquecer de adicionar meus módulos de nó ao arquivo .gitignore, isso resolve esse problema.

lordharbar
fonte
1

Isso funcionou para mim

git reset HEAD 'filename'

Vivek
fonte
1

Para remover todos os arquivos do Untrack. Experimente este comando do terminal

 git clean -fdx
divya d
fonte
Ele removerá arquivos do disco e não do histórico do git.
Leonardo
-1

remover arquivos e pastas não rastreados, defina git clean -fdx

Khadraoui Khairi
fonte