Remover uma pasta do git tracking


404

Preciso excluir uma pasta (uploads de nomes) do rastreamento. Eu tentei correr

git rm -r --cached wordpress/wp-content/uploads

e depois adicionei o caminho para .gitignore

/wordpress/wp-content/uploads

mas quando corri, git statuseles aparecem como excluídos. Se eu tentar confirmar as alterações, os arquivos serão excluídos, não apenas removidos do rastreamento.

O que estou fazendo errado?

Eu também tentei

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

mas isso parece rastrear apenas arquivos. Mas preciso remover uma pasta inteira (incluindo subpastas) do rastreamento.


Excluir não significa que o git excluirá seus arquivos. No entanto, se você usar reset --hard, ele usará.
— Keltar

2
Como o @keltar menciona, a confirmação não fará com que seus arquivos sejam excluídos. Ele confirmará a exclusão do Git , mas sua cópia de trabalho ainda os conterá. Mas se você pullconfirmar em outro lugar, esses arquivos serão excluídos do novo sistema.
— 18714 Chris

Respostas:


868

Me deparei com essa pergunta enquanto pesquisava no Google por "git remove folder from tracking". A pergunta do OP me levou à resposta. Estou resumindo aqui para as gerações futuras.

Questão

Como removo uma pasta do meu repositório git sem excluí-la da minha máquina local (por exemplo, ambiente de desenvolvimento)?

Responda

Etapa 1. Adicione o caminho da pasta ao .gitignorearquivo raiz do seu repositório .

path_to_your_folder/

Etapa 2. Remova a pasta do seu rastreamento git local, mas mantenha-a em seu disco.

git rm -r --cached path_to_your_folder/

Etapa 3. Envie suas alterações ao seu repositório git.

A pasta será considerada "excluída" do ponto de vista do Git (ou seja, eles estão no histórico anterior, mas não no último commit, e as pessoas que fazem parte deste repositório obtêm os arquivos removidos de suas árvores), mas permanecem no diretório de trabalho porque você já usou --cached.


2
Pergunta rápida, o caminho da pasta precisa ser o caminho completo? ou apenas o caminho com o repositório git agindo como base?
— HMSCelestia

Eu acredito que é o caminho completo, mas não me lembro com certeza.
— Tod Birdsall

7
"e as pessoas que sairem deste repositório removerão os arquivos de suas árvores" Posso impedir isso?
— Leo Gasparrini

isso removeu corretamente meus arquivos do rastreamento em uma ramificação, mas os excluiu após uma mesclagem!
— Harold

11
para mim ainda permanece. Além disso - devo desmarcar esses arquivos ao confirmar quais estão na pasta? Eu tentei nos dois sentidos. Se desmarcar, ele não permite o envio por push, mas alterei um caractere em outro arquivo que deve ser rastreado. Ainda não ajuda
— Darius.V

44

Isso funciona para mim:

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch é importante aqui, sem essa opção, o git sairá com erro no primeiro arquivo que não está no índice.


unknown option 'ignore unmatched'
— Inigo

Este é um sinalizador importante se o diretório estiver vazio, obrigado!
— MNN

muito útil se você quiser apenas remover certas extensões de arquivo de um diretório também:git rm -r --cached --ignore-unmatch .idea/*.xml
— takanuva15


8

Eu sei que esse é um tópico antigo, mas eu só queria adicionar um pouco, pois a solução marcada não resolveu o problema para mim (embora eu tenha tentado várias vezes).

A única maneira de eu realmente parar o git form tracking da pasta era fazer o seguinte:

  1. Faça um backup da pasta local e coloque-a em um local seguro.
  2. Exclua a pasta do seu repositório local
  3. Verifique se o cache está limpo git rm -r --cached your_folder/
  4. Adicionar your_folder/a .gitignore
  5. Confirmar as alterações
  6. Adicione o backup novamente ao seu repositório

Agora você deve ver que a pasta não é mais rastreada.

Não me pergunte por que apenas limpar o cache não funcionou para mim, não sou um super assistente do Git, mas foi assim que resolvi o problema.


Obrigado!!! Git estava me deixando louco, sem ignorar a pasta .metadata do eclipse. Siga suas etapas com a pasta eclipse .metadata e finalmente funcionou.
— precisa saber é o seguinte

5

Na documentação do git:

Outra coisa útil que você pode querer fazer é manter o arquivo na sua árvore de trabalho, mas removê-lo da sua área de preparação. Em outras palavras, convém manter o arquivo no disco rígido, mas o Git não o acompanha mais. Isso é particularmente útil se você esqueceu de adicionar algo ao seu arquivo .gitignore e o organizou acidentalmente, como um arquivo de log grande ou um monte de arquivos .a compilados. Para fazer isso, use a opção --cached:

$ git rm --cached readme.txt

Então, talvez não inclua o "-r"?


11
O OP já tentou --cached. A -ropção é para "recursiva", que deve ser incluída nesta instância.
— 18714 Chris

Achei isso útil. Eu estava procurando como fazer isso em uma pasta e, em seguida, ver a maneira de fazer isso em um arquivo. Estou atualizando este comentário.
— light
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.