Wie entferne ich ein Verzeichnis aus dem Git-Repository?


1233

Ich habe 2 Verzeichnisse in meinem GitHub-Repository. Ich möchte einen von ihnen löschen. Wie kann ich das tun, ohne das gesamte Repository zu löschen und neu zu erstellen?


1
Befinden sich Dateien in den Verzeichnissen?
Fred Foo

3
@ Iarsmans: Ja 6 Dateien. Beide Verzeichnisse sind identisch, außer dass eines in Großbuchstaben und das andere in Kleinbuchstaben geschrieben ist.
Sahat Yalkabov

Antworten:


2323

Entfernen Sie das Verzeichnis aus git und local

Sie können 'master' mit beiden Verzeichnissen auschecken.

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)

Entfernen Sie das Verzeichnis aus Git, aber NICHT lokal

Wie in den Kommentaren erwähnt, möchten Sie dieses Verzeichnis normalerweise aus git entfernen, aber nicht vollständig aus dem Dateisystem (lokal) löschen.

In diesem Fall verwenden Sie:

git rm -r --cached myFolder

8
Ich hatte genau die gleiche Situation. Als ich es versuchte git rm -r myFolder, funktionierte es, löschte aber auch alles aus dem Verzeichnis "MyFolder". Musste alles im "MyFolder" -Verzeichnis zurücksetzen und dann festschreiben.
Justin

240
@ Justin Um nur aus Git zu entfernen und das Dateisystem unverändert zu lassen, verwenden Siegit rm -r --cached myFolder
karmakaze

32
Die Fehlermeldung, die ich erhalte, lautet: fatal: pathspec 'Verzeichnis' stimmte nicht mit Dateien überein.
user2441441

3
@ user2441441 Ich hatte diesen Fehler, als ich versuchte, einen Ordner / eine Datei zu entfernen, die überhaupt nicht zum Repo hinzugefügt wurde
lukeatdesignworks

3
git rm -r --cached directory/wird nur aus git verfolgt, aber die Repository-Struktur bleibt erhalten.
Néstor

287

Um Ordner / Verzeichnis nur aus dem Git-Repository und nicht aus dem lokalen zu entfernen, versuchen Sie 3 einfache Befehle.


Schritte zum Entfernen des Verzeichnisses

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

Schritte zum Ignorieren dieses Ordners bei den nächsten Commits

Um diesen Ordner bei den nächsten Commits zu ignorieren, erstellen Sie eine Datei im Stammverzeichnis mit dem Namen .gitignore und fügen Sie diesen Ordnernamen ein . Sie können so viele setzen, wie Sie möchten

Die .gitignore- Datei sieht folgendermaßen aus

/FolderName

Verzeichnis entfernen


1
Sie müssen auch den git rm -r --cached FolderName git commit -m "Ordner aus dem Repository entfernt" auf Ihrem anderen Computer ausführen und dann einen Pull ausführen, um ihn synchron zu halten.
Simon

1
Löscht dies das Verzeichnis von dem Punkt, an dem es bisher zum Repository hinzugefügt wurde? Oder ist es nur, um das Verzeichnis zu entfernen und es wieder in das .git-Repo zu übernehmen?
Alpha_989

1
Großartig! Arbeiten!
BeingCoders

2
Gut erklärt, nette Antwort
Rakshit Shah

1
gut gemacht. Auf meinem Computer funktioniert der dritte Schritt nicht. Aber es funktioniert, wenn es in $ git push geändert wird
Hong

82

Wenn das, was karmakaze gesagt hat, aus irgendeinem Grund nicht funktioniert, können Sie versuchen, das gewünschte Verzeichnis mit oder mit Ihrem Dateisystembrowser (z. B. im Windows-Datei-Explorer) zu löschen. Geben Sie nach dem Löschen des Verzeichnisses den folgenden Befehl ein:
git add -A
und dann
git commit -m 'deleting directory'
und dann
git push origin master.


4
Das hat bei mir funktioniert. Könnten Sie das -A-Argument erklären?
Arun

2
@Arun -A ist die Abkürzung für --all und fügt Änderungen von allen verfolgten und nicht verfolgten Dateien hinzu
Joachim Rohde

Das hat bei mir funktioniert.
UVM

20

Sie können dies versuchen: git rm -rf <directory_name>

Dadurch wird das Löschen des Verzeichnisses erzwungen.


3
Dies wird auch aus dem lokalen Verzeichnis
gelöscht

18

Wenn Sie die Dateien im Verzeichnis entfernen (mit git rm wie in den anderen Antworten erläutert), ist das Verzeichnis für Git nicht mehr vorhanden. Sie können weder ein leeres Verzeichnis festschreiben noch eines entfernen.

Dies ist anders als bei Subversion, wo Sie explizit müssen svn rm emptyfolder/, und ist im Übrigen der Grund, warum dieman Seite für Git selbst als "der dumme Content-Tracker" bezeichnet.

Eine Antwort auf "Wie füge ich einem Git-Repository ein leeres Verzeichnis hinzu?" Verlinkt auf die FAQ zu diesem Thema :

Derzeit erlaubt das Design des Git-Index (Staging-Bereich) nur das Auflisten von Dateien, und niemand, der kompetent genug ist, um die Änderung vorzunehmen, um leere Verzeichnisse zuzulassen, hat sich genug um diese Situation gekümmert, um Abhilfe zu schaffen.

Verzeichnisse werden automatisch hinzugefügt, wenn Dateien hinzugefügt werden. Das heißt, Verzeichnisse müssen niemals zum Repository hinzugefügt werden und werden nicht einzeln verfolgt.

Sie können " git add <dir>" sagen und es werden dort Dateien hinzugefügt.

Wenn Sie wirklich ein Verzeichnis benötigen, das an den Kassen vorhanden sein soll, sollten Sie eine Datei darin erstellen. .gitignore funktioniert gut für diesen Zweck; Sie können es leer lassen oder die Namen der Dateien eingeben, die voraussichtlich im Verzeichnis angezeigt werden.


8

Ich hatte den Ordner bereits zuvor festgeschrieben und möchte das Verzeichnis auch im Verlauf entfernen.

Ich habe folgendes gemacht:

Ordner hinzufügen zu .gitignore:

echo Folder_Name/ >> .gitignore

Von allen Commits entfernen:

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

Entfernen Sie die Refs aus den alten Commits:

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

Stellen Sie sicher, dass alle alten Refs vollständig entfernt wurden

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

Führen Sie eine Speicherbereinigung durch

git gc --prune=all --aggressive

Pushen Sie Änderungen in das Online-Repository:

git push

Sie sind hier fertig.

Sie können jedoch Folgendes tun, um alle Änderungen auf alle Zweige mit zu übertragen: Aber seien Sie vorsichtig mit diesem Befehl!

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

Danach wurde der Ordner von git entfernt, aber nicht von der lokalen Festplatte gelöscht.


7

zum Löschen leerer Ordner

Ich wollte ein leeres Verzeichnis (Ordner) löschen, das ich erstellt habe. Git kann es nicht löschen. Nach einigen Recherchen habe ich erfahren, dass Git keine leeren Verzeichnisse verfolgt. Wenn Sie ein leeres Verzeichnis in Ihrem Arbeitsbaum haben, sollten Sie es einfach mit entfernen

rm -r folderName

Es ist nicht erforderlich, Git einzubeziehen.


1
Vielen Dank! Genau das brauchte ich.
SpyrosKo

6

Gehen Sie zu Ihrem Git-Verzeichnis und geben Sie den folgenden Befehl ein: rm -rf < Verzeichnisname >

Nach dem Löschen des Verzeichnisses werden die Änderungen festgeschrieben durch: git commit -m "Ihre Festschreibungsnachricht"

Dann drücken Sie einfach die Änderungen in das entfernte GIT-Verzeichnis: git push origin < Zweigname >


4

Sie können den Ordner lokal löschen und dann wie folgt drücken:

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

4

Normalerweise git add --allentferne ich Dateien / Ordner aus Remote-Repositorys

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

master kann durch einen anderen Zweig des Repositorys ersetzt werden.



1

Einer meiner Kollegen schlug BFG Repo-Cleaner vor, was ich für mächtig halte. Es werden nicht nur unerwünschte Daten gelöscht, sondern auch Ihr Repository von verwandten Commit-Informationen befreit.


1

So fügen Sie ein neues Verzeichnis hinzu:

mkdir <YOUR-DIRECTORY>

Aber jetzt ist Git dieses neue Verzeichnis nicht bekannt, da Git die Dateien und nicht die Verzeichnisse DIRECTORY verfolgt

git status

Git ist sich der vorgenommenen Änderung nicht bewusst, daher fügen wir versteckte .keepDateien hinzu, um Git auf diese neue Änderung aufmerksam zu machen.

touch /YOUR-directory/.keep

Nun, wenn Sie schlagen git status Git über die Änderungen informiert.

Und wenn Sie das Verzeichnis löschen möchten, sollten Sie diesen Befehl verwenden.

rm -r <YOUR-DIRECTORY>

Wenn Sie dies mit überprüfen git status, sehen Sie, dass das Verzeichnis entfernt wurde.


0

Der erste git-Befehl muss wissen, wer Sie sind, bevor Sie etwas löschen

  1. git init
  2. git config user.name "jemand"
  3. git config user.email "jemand@someplace.com"
  4. git rm -r
  5. git commit -m "Verzeichnis löschen"
  6. Git Push Origin Master

0

Eine Kombination der beiden Antworten hat bei mir funktioniert

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

Wenn immer noch eine Warnung angezeigt wird, entfernen Sie die Dateien manuell

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.