Come rimuovere una directory dal repository git?


Risposte:


2328

Rimuovi directory da git e local

Puoi controllare "master" con entrambe le directory;

git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

Rimuovi directory da git ma NON locale

Come menzionato nei commenti, ciò che di solito si desidera fare è rimuovere questa directory da git ma non eliminarla completamente dal filesystem (locale)

In tal caso utilizzare:

git rm -r --cached myFolder

8
Ho avuto la stessa situazione esatta. Quando l'ho provato git rm -r myFolderha funzionato, ma ha anche eliminato tutto dalla directory "MyFolder". Ho dovuto ripristinare tutto nella directory "MyFolder" e quindi eseguire il commit.
Giustino,

240
@Justin Per rimuovere da git e lasciare il filesystem così com'è, usagit rm -r --cached myFolder
karmakaze

32
Il messaggio di errore che ricevo è: fatal: pathspec 'directory' non corrisponde ad alcun file.
user2441441

3
@ user2441441 Ho visualizzato questo errore quando stavo cercando di rimuovere una cartella / file che non era stato affatto aggiunto al repository
lukeatdesignworks

3
git rm -r --cached directory/rimuove solo da git monitorato, ma la struttura del repository rimane.
Néstor,

287

Per rimuovere la cartella / directory solo dal repository git e non dal locale, provare 3 semplici comandi.


I passaggi per rimuovere la directory

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

I passaggi per ignorare quella cartella nei prossimi commit

Per ignorare quella cartella dai prossimi commit, crea un file nella radice chiamato .gitignore e inseriscici il nome. Puoi metterne quanti ne vuoi

Il file .gitignore sarà simile a questo

/FolderName

rimuovi directory


1
Dovrai anche eseguire git rm -r --cache FolderName git commit -m "Cartella rimossa dal repository" sull'altro computer e fare un pull per mantenerlo sincronizzato.
Simon,

1
Questo eliminerà la directory dal punto in cui è stata aggiunta al repository fino ad ora? O è solo per rimuovere la directory e riconsiderarla al repository .git?
alpha_989,

1
Grande! Lavorando!
BeingCoders,

2
Ben spiegato, bella risposta
Rakshit Shah,

1
molto bene. Sulla mia macchina, il terzo passo non funziona. Ma funziona se viene cambiato in $ git push
Hong

82

Se, per qualche motivo, ciò che Karmakaze ha detto non funziona, puoi provare a eliminare la directory che desideri utilizzare o con il browser del tuo file system (ad es. In Esplora file di Windows). Dopo aver eliminato la directory, immettere il comando:
git add -A
e quindi
git commit -m 'deleting directory'
e quindi
git push origin master.


4
Questo ha funzionato per me. Potresti spiegare l'argomento -A?
Arun,

2
@Arun -A è l'abbreviazione di --all e aggiunge le modifiche da tutti i file tracciati e non tracciati
Joachim Rohde

Questo ha funzionato per me.
UVM

20

Puoi provare questo: git rm -rf <directory_name>

Forza la cancellazione della directory.


3
questo cancellerà anche dalla directory locale
abdul rehman kk

18

Se rimuovi i file nella directory (con git rmcome spiegano le altre risposte), la directory non esiste più per quanto riguarda git. Non è possibile eseguire il commit di una directory vuota, né è possibile rimuoverne una.

Questo è diverso dalla sovversione in cui devi esplicitamente svn rm emptyfolder/, ed è per inciso il motivo manper cui la pagina per git si definisce "lo stupido tracker di contenuti"

Una risposta su "Come aggiungere una directory vuota a un repository git" si collega alle FAQ su questo argomento :

Attualmente la progettazione dell'indice git (area di gestione temporanea) consente solo di elencare i file e nessuno abbastanza competente da apportare la modifica per consentire alle directory vuote di occuparsi di questa situazione abbastanza da rimediare.

Le directory vengono aggiunte automaticamente quando si aggiungono file al loro interno. Cioè, le directory non devono mai essere aggiunte al repository e non vengono tracciate da sole.

Puoi dire " git add <dir>" e aggiungerà i file lì dentro.

Se hai davvero bisogno di una directory per i checkout, devi creare un file al suo interno. .gitignore funziona bene per questo scopo; puoi lasciarlo vuoto o inserire i nomi dei file che ti aspetti di apparire nella directory.


9

Avevo già eseguito il commit della cartella in precedenza e desidero rimuovere anche la directory nella cronologia.

Ho fatto quanto segue:

Aggiungi cartella a .gitignore:

echo Folder_Name/ >> .gitignore

Rimuovi da tutti i commit:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

rimuovere i ref dai vecchi commit:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

Assicurarsi che tutti i vecchi riferimenti siano stati completamente rimossi

rm -Rf .git/logs .git/refs/original

Eseguire una garbage collection

git gc --prune=all --aggressive

spingere le modifiche al repository online:

git push

Hai finito qui.

Ma puoi fare quanto segue per inviare tutte le modifiche a tutti i rami con: Ma fai attenzione con questo comando!

git push origin --all --force
git push origin --tags --force

Successivamente la cartella è stata rimossa da git, ma non è stata eliminata dal disco locale.


7

per eliminare le cartelle vuote

volevo cancellare una directory vuota (cartella) che ho creato, git non può cancellarla, dopo alcune ricerche ho imparato che Git non tiene traccia delle directory vuote. Se hai una directory vuota nell'albero di lavoro, devi semplicemente rimuoverla

rm -r folderName

Non è necessario coinvolgere Git.


1
Grazie! Questo è proprio quello di cui avevo bisogno.
SpyrosKo

6

Vai alla tua directory git quindi digita il seguente comando: rm -rf < Nome directory >

Dopo aver eliminato la directory, esegui il commit delle modifiche tramite: git commit -m "Il tuo messaggio di commit"

Quindi invia semplicemente le modifiche sulla directory GIT remota: git push origin < nome filiale >


4

È possibile eliminare la cartella localmente e quindi premere, come segue:

git rm -r folder_name
git commit -m "your commit"
git push origin master

4

Di solito uso git add --allper rimuovere file / cartelle da repository remoti

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master può essere sostituito da qualsiasi altro ramo del repository.


2

È possibile utilizzare Attlasian Source Tree (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Basta selezionare i file dall'albero e premere il pulsante "Rimuovi" in alto. I file verranno eliminati dal repository locale e dal database git locale. Quindi Commit, quindi premere.


Questo è anche quello che faccio. Ha reso tutto molto semplice, tuttavia, l'apprendimento dei comandi git è una buona cosa da sapere.
Micah Montoya,

1

Uno dei miei colleghi ha suggerito BFG Repo-Cleaner che ritengo potente. Non solo elimina i dati indesiderati, ma pulisce anche il repository da qualsiasi informazione di commit correlata.


1

Per aggiungere una nuova directory:

mkdir <YOUR-DIRECTORY>

Ma ora Git non è a conoscenza di questa nuova directory, perché Git tiene traccia dei file e non delle directory DIRECTORY

git status

Git non sarà a conoscenza della modifica che abbiamo apportato, quindi aggiungiamo il .keepfile nascosto per rendere Git consapevole di questa nuova modifica.

touch /YOUR-directory/.keep

Ora, se premi git statusGit, sarai consapevole delle modifiche.

E se vuoi eliminare la directory, dovresti usare questo comando.

rm -r <YOUR-DIRECTORY>

E se hai controllato usando git status, vedrai che la directory è stata rimossa.


0

Il primo comando git deve sapere chi sei prima di eliminare qualsiasi cosa

  1. git init
  2. git config user.name "qualcuno"
  3. git config user.email "someone@someplace.com"
  4. git rm -r
  5. git commit -m "elimina dir"
  6. git push origin master

0

Una combinazione delle 2 risposte ha funzionato per me

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

se mostra ancora qualche avviso, rimuovi i file manualmente

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
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.