Ich habe ein Commit mit der ID 56f06019 (zum Beispiel). Bei diesem Commit habe ich versehentlich eine große Datei (50 MB) festgeschrieben. In einem anderen Commit füge ich die gleiche Datei hinzu, aber in der richtigen Größe (klein). Jetzt ist mein Repo beim Klonen zu schwer :( Wie entferne ich diese große Datei aus dem Repo-Verlauf, um die Größe meines Repos zu verringern?
113
Antworten:
Kapitel 9 des Pro Git- Buches enthält einen Abschnitt zum Entfernen von Objekten .
Lassen Sie mich hier kurz die Schritte skizzieren:
Wie bei der zuvor beschriebenen Neubasierungsoption
filter-branch
handelt es sich um einen Umschreibvorgang. Wenn Sie den Verlauf veröffentlicht haben, müssen Sie--force
die neuen Refs verschieben.Der
filter-branch
Ansatz ist wesentlich leistungsfähiger als derrebase
Ansatz, da erfilter-branch
Bewahrt auch Backups auf, sodass die Größe des Repos nicht sofort abnimmt, es sei denn, Sie verfallen die Reflogs und die Müllabfuhr:quelle
git filter-branch --force --index-filter 'git rm --ignore-unmatch --cached PathTo/MyFile/ToRemove.dll' -- fbf28b005^..
Dannrm --recursive --force .git/refs/original
undrm --recursive --force .git/logs
dann habe ich dasgit prune --expire now
undgit gc --aggressive
Dies hat für mich besser funktioniert als Ihre genauen Schritte oben aufgeführt. Vielen Dank, dass Sie den Link zum Git Pro-Buch aufgenommen haben, da es von unschätzbarem Wert war.Sie können das Git-Extras- Tool verwenden. Mit dem Befehl obliterate wird eine Datei vollständig aus dem Repository entfernt, einschließlich früherer Commits und Tags.
https://github.com/tj/git-extras/blob/master/Commands.md
quelle
Sie müssen git rebase im interaktiven Modus ausführen. Ein Beispiel finden Sie hier: Wie kann ich ein Commit auf GitHub entfernen? und wie man alte Commits entfernt .
Wenn Ihr Commit bei HEAD minus 10 Commits liegt:
Nach der Ausgabe Ihres Verlaufs müssen Sie den "neuen" Verlauf pushen, Sie müssen den
+
to force hinzufügen (siehe die Referenz in den Push-Optionen ):Wenn andere Personen Ihr Repository bereits geklont haben, werden Sie sie informieren, da Sie gerade den Verlauf geändert haben.
quelle
git push --force
odergit push -f
(was nicht erfordert, dass die Leute das Zweig-Push-Ziel kennen)git rm
den Pfad nicht direkt verwenden .Ich habe versucht, die folgende Antwort unter Windows https://stackoverflow.com/a/8741530/8461756 zu verwenden
Einfache Anführungszeichen funktionieren unter Windows nicht. Sie benötigen doppelte Anführungszeichen.
Das Folgende hat bei mir funktioniert.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot / bigfile.csv" - --all
Nachdem ich die große Datei entfernt hatte, konnte ich meine Änderungen an Github Master übertragen.
quelle
Sie können einen einfachen Befehl zum Löschen verwenden
quelle