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.)



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


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.


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


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.


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


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


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


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


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.


1

Isso funcionou para mim

git reset HEAD 'filename'


1

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

 git clean -fdx

Ele removerá arquivos do disco e não do histórico do git.
Leonardo

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.