Ich habe ein Verzeichnis festgeschrieben und an github gesendet. Danach habe ich die .gitignore
Datei geändert und ein Verzeichnis hinzugefügt, das ignoriert werden sollte. Alles funktioniert gut, aber das (jetzt ignorierte) Verzeichnis bleibt auf Github.
Wie lösche ich dieses Verzeichnis aus Github und dem Repository-Verlauf?
Antworten:
Die Regeln in Ihrer
.gitignore
Datei gelten nur für nicht verfolgte Dateien. Da die Dateien unter diesem Verzeichnis bereits in Ihrem Repository festgeschrieben wurden, müssen Sie sie entfernen, ein Festschreiben erstellen und an GitHub senden:Sie können die Datei nicht aus Ihrem Verlauf löschen, ohne den Verlauf Ihres Repositorys neu zu schreiben. Sie sollten dies nicht tun, wenn andere Personen mit Ihrem Repository arbeiten oder es von mehreren Computern aus verwenden. Wenn Sie dies dennoch tun möchten, können Sie
git filter-branch
den Verlauf neu schreiben. Hier finden Sie eine hilfreiche Anleitung dazu .Beachten Sie außerdem, dass die Ausgabe von
git rm -r --cached some-directory
ungefähr so lautet:Das
rm
ist Feedback von Git über das Repository; Die Dateien befinden sich noch im Arbeitsverzeichnis.quelle
-r
und--cached
. Vielen Dank.-r
bedeutet rekursiv, notwendig, wenn Sie ganze Verzeichnisse erstellen .--cached
Überschreibt das normale Verhalten von git, sie aus dem Arbeitsverzeichnis zu löschen und das Löschen zum Festschreiben bereitzustellen, und lässt git nur in dem Bereitstellungsbereich arbeiten, der zum Festschreiben bereit ist. Auf diese Weise teilen Sie git mit, dass Sie Ihre lokalen Kopien der Dateien behalten möchten.git reset name_of_file
damit das, was oben beschrieben wurde, funktioniertIch mache das:
Dadurch werden alle Dateien / Ordner, die in Ihrem Git enthalten sind, ignoriert und Sie müssen sie nicht manuell auswählen
Das scheint für mich aufgehört zu haben, das tue ich jetzt:
quelle
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
Gemäß meiner Antwort hier: Wie entferne ich ein Verzeichnis aus dem Git-Repository?
Um Ordner / Verzeichnis nur aus dem Git-Repository und nicht aus dem lokalen zu entfernen, versuchen Sie 3 einfache Schritte.
Schritte zum Entfernen des Verzeichnisses
Schritte zum Ignorieren dieses Ordners bei den nächsten Commits
Die .gitignore- Datei sieht folgendermaßen aus
quelle
Blundells erste Antwort hat bei mir nicht funktioniert. Es hat mir jedoch den richtigen Weg gezeigt. Ich habe das Gleiche getan:
Ich empfehle Ihnen, die zu löschenden Dateien zuerst zu überprüfen, indem Sie die folgende Anweisung ausführen:
Ich habe eine Standard-Gitignore-Datei für Visual Studio verwendet und festgestellt, dass alle Protokoll- und Bin-Ordner im Projekt entfernt wurden, was nicht meine beabsichtigte Aktion war.
quelle
Hinweis: Diese Lösung funktioniert nur mit der Github Desktop-Benutzeroberfläche .
Mit der Github Desktop-Benutzeroberfläche ist dies sehr einfach.
Verschieben Sie den Ordner vorübergehend an einen anderen Speicherort (aus dem Projektordner).
Bearbeiten Sie Ihre
.gitignore
Datei und entfernen Sie den Ordnereintrag, der das Master-Repository auf der Github-Seite entfernen würde.Übernehmen und synchronisieren Sie den Projektordner.
Verschieben Sie den Ordner in den Projektordner
.gitignore
Datei erneut bearbeiten .Das ist alles.
quelle
Die Antwort von Blundell sollte funktionieren, aber aus irgendeinem bizarren Grund hat es bei mir nicht geklappt. Ich musste zuerst die vom ersten Befehl ausgegebenen Dateinamen in eine Datei leiten und dann diese Datei durchlaufen und diese Datei einzeln löschen.
quelle
Wenn Sie auch die neu ignorierten Dateien aus dem Festschreibungsverlauf des Zweigs löschen müssen oder wenn Sie nicht möchten, dass die neu ignorierten Dateien aus zukünftigen Pulls gelöscht werden, lesen Sie diese Antwort .
quelle
Wenn Sie mit PowerShell arbeiten, versuchen Sie Folgendes als einzelnen Befehl.
Dann
git push --force --all
.Dokumentation: https://git-scm.com/docs/git-filter-branch
quelle
git filter-branch
von der Verwendunggit rm
? Ich dachte ursprünglich, ich muss eine Version von verwenden,git filter-branch
aber die meisten Kommentare hier empfehlen die Verwendunggit rm
. Soweit ichgit rm
weiß, wird es nur aus dem aktuellen Arbeitsverzeichnis und Index entfernt. Wenn jedoch zuvor mehrere Commits hinzugefügt wurden, befindet es sich weiterhin im Repository.git rm
wird die Datei aus dem letzten Commit in der Zukunft entfernen.git filter-branch
Lassen Sie uns es aus der gesamten Geschichte entfernen. Siehe auch: help.github.com/articles/…