Manchmal kommt es vor, dass ein Teammitglied unerwünschte Dateien in das Git-Repository überträgt und wir diese später daraus löschen. Diese Dateien befinden sich jedoch weiterhin im Git-Verlauf, sodass jeder Klon des Repositorys diesen Dateiverlauf abruft, was Zeit, Bandbreite und Speicherplatz verbraucht.
Sehen wir uns an, wie gelöschte Dateien aus dem Git-Repository entfernt werden können.
„ Stellen Sie sicher, dass Sie für alle Fälle eine Sicherungskopie des lokalen Repositorys erstellen, falls etwas schiefgeht.“
git filter-branch
Verwendengit filter-branchBefehl zum Entfernen einer Datei aus allen Commits:
In die Zwischenablage kopieren
1 git filter-branch --prune-empty -d /dev/shm/scratch \
2 --index-filter "git rm --cached -f --ignore-unmatch Dateiname" \
3 --tag-name-filter cat -- --alle
Verwendete Git-Filterzweigoptionen:
- --prune-empty entfernt Commits, die durch den Filtervorgang leer werden ( d. h . den Baum nicht ändern). Im Normalfall führt diese Option zu einem saubereren Verlauf.
- -d gibt ein temporäres Verzeichnis an, das noch nicht existiert und für die Erstellung des gefilterten Verlaufs verwendet werden soll. Wenn Sie eine moderne Linux-Distribution verwenden, geben Sie Folgendes an:Der Baum in /dev/shm führt zu einer schnelleren Ausführung.
- --index-filter ist das Hauptereignis und wird bei jedem Schritt im Verlauf gegen den Index ausgeführt. Sie möchten oops.iso entfernen , wo immer es gefunden wird, aber es ist nicht in allen Commits vorhanden. Der Befehl git rm --cached -f --ignore-unmatch oops.iso löscht den DVD-Rip, wenn er vorhanden ist, und schlägt andernfalls nicht fehl.
- --tag-name-filter beschreibt, wie Tag-Namen umgeschrieben werden. Ein Filter vom Typ „cat“ ist die Identitätsoperation. Ihr Repository enthält, wie das obige Beispiel, möglicherweise keine Tags, aber ich habe diese Option der Allgemeingültigkeit halber hinzugefügt.
- -- gibt das Ende der Optionen für den Git-Filterzweig an
- --all following -- ist die Abkürzung für alle Referenzen. Ihr Repository kann, wie das obige Beispiel, nur eine Referenz (Master) haben, ich habe diese Option jedoch aus Gründen der Allgemeingültigkeit hinzugefügt.
Sie können auch ein ganzes Verzeichnis entfernen:
1 git filter-branch --prune-empty -d /dev/shm/scratch \
2 --index-filter "git rm --cached -f --ignore-unmatch Dateiname" \
3 --tag-name-filter cat -- --alle
Sie können überprüfen, ob Commits, die die Datei enthalten, geändert wurden und Commits, die nur diese Datei enthalten, aus dem Protokoll entfernt werden. Überprüfen Sie dies mit gitk oder git log.
Verkleinern Sie das Repository
Wir haben git-filter-branch verwendet, um Dateien aus Commits zu entfernen. Normalerweise wird erwartet, dass das resultierende Repository kleiner als das Original ist. Um es tatsächlich zu verkleinern, sind jedoch einige zusätzliche Schritte erforderlich, da Git darauf achtet, Objekte erst dann zu verlieren, wenn Sie es dazu auffordern.
- Entfernen Sie die ursprünglichen Referenzen, die durch den Git-Filter-Branch gesichert wurden (tun Sie dies für alle Zweige):
In die Zwischenablage kopieren1
git update-ref -d refs/original/refs/heads/master
Alle Reflogs ablaufen lassen mit:
In die Zwischenablage kopieren1
git reflog expire --expire =now --all
- Garbage Collect für alle nicht referenzierten Objekte mit
In die Zwischenablage kopieren1
git gc --prune =jetzt
Sie sind jetzt bereit zum Pressen .
Git Push
Übertragen Sie Ihren aktualisierten Baum in das Git-Repository. Stellen Sie sicher, dass Sie über die erforderlichen Rechte verfügen.
Was K
- Amit Kansagara ist ein erfahrener ERP-Experte mit über 15 Jahren Branchenerfahrung. Er war über ein Jahrzehnt in Australien, Malaysia und den USA tätig und entwickelte dort maßgeschneiderte Softwarelösungen. Sein Spezialgebiet ist Automatisierung, die es Unternehmen durch den Einsatz effektiver ERP-Systeme ermöglicht, sich auf ihre Kernaktivitäten zu konzentrieren. Er arbeitet derzeit als ERP-Berater und ist spezialisiert auf die Entwicklung und Implementierung von Lösungen für Großunternehmen, insbesondere auf RFID-basierte Bestandssysteme, KI-Integration und Prozessautomatisierung. Amit unterstützt Unternehmen dabei, ihre Betriebsabläufe zu optimieren und durch innovative technologische Lösungen langfristigen Erfolg zu erzielen.
Vereinbaren Sie einen Beratungstermin mit Amit Jetzt planen