Rimuovi una cartella dal tracciamento git


405

Devo escludere una cartella (caricamenti dei nomi) dal tracciamento. Ho provato a correre

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

e successivamente ho aggiunto il percorso a .gitignore

/wordpress/wp-content/uploads

ma quando l'ho eseguito git statusvengono visualizzati come eliminati. Se provo a eseguire il commit delle modifiche, i file verranno eliminati, non solo rimossi dal tracciamento.

Che cosa sto facendo di sbagliato?

Ho anche provato

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

ma questo sembra non tracciare solo i file. Ma devo rimuovere un'intera cartella (comprese le sottocartelle) dal tracciamento.


Eliminato non significa che git sta per eliminare i tuoi file. Tuttavia, se lo utilizzerai reset --hard, lo farà.
Keltar,

2
Come menzionato da @keltar, il commit non provocherà l'eliminazione dei file. Commetterà la loro cancellazione da Git , ma la tua copia di lavoro li conterrà comunque. Ma se ti pullimpegni da qualche altra parte, quei file verranno eliminati dal nuovo sistema.
Chris,

Risposte:


869

Mi sono imbattuto in questa domanda mentre cercavo su Google "git rimuovere la cartella dal monitoraggio". La domanda del PO mi porta alla risposta. Lo sto riassumendo qui per le generazioni future.

Domanda

Come rimuovo una cartella dal mio repository git senza eliminarla dal mio computer locale (ovvero, ambiente di sviluppo)?

Risposta

Passaggio 1. Aggiungere il percorso della cartella al .gitignorefile root del repository .

path_to_your_folder/

Passaggio 2. Rimuovere la cartella dal tracciamento git locale, ma tenerlo sul disco.

git rm -r --cached path_to_your_folder/

Passaggio 3. Invia le modifiche al repository git.

La cartella verrà considerata "eliminata" dal punto di vista di Git (ovvero sono nella cronologia passata, ma non nell'ultimo commit e le persone che effettuano il pull da questo repository rimuoveranno i file dai loro alberi), ma rimangono nella directory di lavoro perché hai usato --cached.


2
Domanda veloce, il percorso della cartella deve essere il percorso completo? o semplicemente il percorso con il repository git che funge da base?
HMSCelestia,

Credo che sia il percorso completo, ma non ricordo per certo.
Tod Birdsall,

7
"e le persone che effettuano il pull da questo repository rimuoveranno i file dai loro alberi" Posso impedirlo?
Leo Gasparrini,

questo ha rimosso correttamente i miei file dal tracciamento su un ramo, ma li ha eliminati dopo una fusione!
Harold,

1
per me rimane ancora. Inoltre - dovrei deselezionare quei file quando commetto quali sono nella cartella? Ho provato in entrambi i modi. Se deselezionata, non consente di eseguire il push, ma poi ho modificato un carattere in un altro file che dovrebbe essere monitorato. Ancora non aiuta
Darius.V

44

Questo funziona per me:

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

--ignore-unmatch è importante qui, senza quell'opzione git uscirà con errore sul primo file non nell'indice.


unknown option 'ignore unmatched'
Inigo,

Questa è una bandiera importante se la directory è vuota, grazie!
MNN,

molto utile se si desidera rimuovere anche determinate estensioni di file da una directory:git rm -r --cached --ignore-unmatch .idea/*.xml
takanuva15


8

So che questo è un vecchio thread, ma volevo solo aggiungere un po 'poiché la soluzione contrassegnata non mi ha risolto il problema (anche se ci ho provato molte volte).

L'unico modo in cui ho potuto effettivamente smettere di tracciare git form la cartella era di fare quanto segue:

  1. Fai un backup della cartella locale e mettilo in un posto sicuro.
  2. Elimina la cartella dal tuo repository locale
  3. Assicurarsi che la cache sia cancellata git rm -r --cached your_folder/
  4. Aggiungi your_folder/a .gitignore
  5. Effettua modifiche
  6. Aggiungi il backup nel tuo repository

Ora dovresti vedere che la cartella non è più tracciata.

Non chiedermi perché solo svuotare la cache non ha funzionato per me, non sono un super wizard di Git ma è così che ho risolto il problema.


Grazie!!! Git mi stava facendo impazzire non ignorando la cartella .metadata di eclissi. Segui i tuoi passi con la cartella .metadata di eclipse e alla fine ha funzionato.
MasterN8

5

Dalla documentazione git:

Un'altra cosa utile che potresti voler fare è mantenere il file nell'albero di lavoro ma rimuoverlo dall'area di gestione temporanea. In altre parole, potresti voler conservare il file sul tuo disco rigido ma non farne più traccia a Git. Ciò è particolarmente utile se hai dimenticato di aggiungere qualcosa al tuo file .gitignore e lo hai messo in scena accidentalmente, come un file di registro di grandi dimensioni o un gruppo di file .a compilati. Per fare ciò, usa l'opzione --cached:

$ git rm --cached readme.txt

Quindi forse non includere il "-r"?


1
L'OP ha già provato --cached. L' -ropzione è "ricorsiva", che dovrebbe essere inclusa in questa istanza.
Chris,

L'ho trovato utile. Stavo cercando come farlo su una cartella, e poi vedevo il modo di farlo su un file. Sto sottolineando questo commento.
luce
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.