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.