853 Stimmen

Verzeichnis aus dem entfernten Repository entfernen, nachdem es zu .gitignore hinzugefügt wurde

Ich habe einige Verzeichnisse an Github übergeben und veröffentlicht. Danach änderte ich die .gitignore Datei, die ein Verzeichnis hinzufügt, das ignoriert werden soll. Alles funktioniert gut, aber das (jetzt ignorierte) Verzeichnis bleibt auf Github.

Wie lösche ich dieses Verzeichnis aus Github und dem Repository-Verlauf?

1444voto

Mark Longair Punkte 412179

Die Regeln in Ihrem .gitignore Datei gelten nur für nicht verfolgte Dateien. Da die Dateien in diesem Verzeichnis bereits in Ihr Repository übertragen wurden, müssen Sie die Übertragung aufheben, eine Übertragung erstellen und diese an GitHub übertragen:

git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git push origin master

Sie können die Datei nicht aus Ihrem Verlauf löschen, ohne den Verlauf Ihres Projektarchivs neu zu schreiben - Sie sollten dies nicht tun, wenn jemand anderes mit Ihrem Projektarchiv arbeitet oder Sie es von mehreren Computern aus nutzen. Wenn Sie das trotzdem tun wollen, können Sie git filter-branch um die Geschichte neu zu schreiben - Einen hilfreichen Leitfaden dazu gibt es hier .

Beachten Sie außerdem die Ausgabe von git rm -r --cached some-directory wird etwa so lauten:

rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'

El rm ist eine Rückmeldung von Git über das Repository; die Dateien befinden sich noch im Arbeitsverzeichnis.

343voto

Blundell Punkte 72729

Ich tue dies:

git rm --cached `git ls-files -i --exclude-from=.gitignore` 
git commit -m 'Removed all files that are in the .gitignore' 
git push origin main

Dadurch werden alle Dateien/Ordner, die sich in Ihrem Git-Ignore befinden, entfernt, sodass Sie nicht jede einzelne Datei manuell auswählen müssen


Das scheint bei mir nicht mehr zu funktionieren, ich tue es jetzt:

 git rm -r --cached . 
 git add .
 git commit -m 'Removed all files that are in the .gitignore' 
 git push origin main

81voto

Suresh Karia Punkte 16241

Wie in meiner Antwort hier: Wie entfernt man ein Verzeichnis aus dem Git-Repository?

Um Ordner/Verzeichnisse nur aus dem Git-Repository und nicht aus dem lokalen Verzeichnis zu entfernen, führen Sie 3 einfache Schritte aus.


Schritte zum Entfernen des Verzeichnisses

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

Schritte, um diesen Ordner bei den nächsten Übertragungen zu ignorieren

Um diesen Ordner bei den nächsten Übertragungen zu ignorieren, erstellen Sie eine Datei in Root mit dem Namen .gitignore und geben Sie den Namen des Ordners dort ein. Sie können so viele Namen eingeben, wie Sie möchten

.gitignore Die Datei sieht dann wie folgt aus

/FolderName

remove directory

12voto

efkan Punkte 12166

Hinweis: Diese Lösung funktioniert nur mit Github Desktop-GUI .

Durch die Verwendung von Github Desktop-GUI Es ist sehr einfach.

  1. Verschieben Sie den Ordner vorübergehend an einen anderen Ort (außerhalb des Projektordners).

  2. Bearbeiten Sie Ihr .gitignore Datei und entfernen Sie den Ordnereintrag, der das Master-Repository auf der Github-Seite entfernen würde.

  3. Bestätigen und synchronisieren Sie den Projektordner.

  4. Verschieben Sie den Ordner erneut in den Projektordner

  5. neu bearbeiten .gitignore Datei.

Das ist alles.

12voto

Oncel Umut TURER Punkte 569

Die erste Antwort von Blundell hat mir nicht gefallen. Sie zeigte mir jedoch den richtigen Weg. Ich habe das Gleiche getan:

> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m 'Removed all files that are in the .gitignore'
> git push origin master

Ich empfehle Ihnen, zunächst die zu löschenden Dateien zu überprüfen, indem Sie die folgende Anweisung ausführen:

git ls-files -i --exclude-from=.gitignore

Ich habe eine Standard-Gitignore-Datei für Visual Studio verwendet und festgestellt, dass alle Log- und Bin-Ordner im Projekt entfernt wurden, was nicht meine Absicht war.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X