Rimuovi una cartella dal git tracking

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

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

e dopo ho aggiunto il percorso a .gitignore

 /wordpress/wp-content/uploads 

ma quando ho eseguito lo git status vengono visualizzati come cancellati. Se provo a eseguire il commit delle modifiche, i file verranno eliminati, non solo rimossi dal monitoraggio.

Che cosa sto facendo di sbagliato?

Ho anche provato

 git update-index --assume-unchanged  

ma questo sembra srotolare solo i file. Ma ho bisogno di rimuovere un’intera cartella (comprese le sottocartelle) dal tracciamento.

Mi sono imbattuto in questa domanda mentre cercavo su google “git remove folder from tracking”. La domanda dell’OP mi ha portato 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 (ad esempio, l’ambiente di sviluppo)?

Risposta

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

 path_to_your_folder/ 

Passaggio 2. Rimuovere la cartella dal local git tracking, ma conservarla sul disco.

 git rm -r --cached path_to_your_folder/ 

Passaggio 3. Spingi le modifiche al tuo repository git.

La cartella sarà considerata “cancellata” dal punto di vista di Git (cioè sono nella cronologia passata, ma non nell’ultimo commit, e le persone che tirano da questo repo otterranno i file rimossi dai loro alberi), ma rimarranno nella directory di lavoro perché hai usato --cached .

Questo funziona per me:

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

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

Dalla documentazione git:

Un’altra cosa utile che potresti voler fare è tenere il file nella tua struttura di lavoro ma rimuoverlo dalla tua area di staging. In altre parole, potresti voler tenere il file sul tuo disco rigido ma non farlo seguire da Git. Ciò è particolarmente utile se hai dimenticato di aggiungere qualcosa al tuo file .gitignore e lo hai accidentalmente messo in scena, come un grande file di log o un mucchio di file .a compilati. Per fare ciò, usa l’opzione –cached:

 $ git rm --cached readme.txt 

Quindi forse non includere il “-r”?

Per dimenticare la directory aggiungere ricorsivamente /*/* al percorso:

 git update-index --assume-unchanged wordpress/wp-content/uploads/*/* 

Usare git rm --cached non è buono per la collaborazione. Maggiori dettagli qui: Come interrompere il tracciamento e ignorare le modifiche a un file in Git?

Passaggio 2.5: conferma le modifiche:

 >git commit 

Se spingi senza farlo prima, non fa nulla!