In meinem Projekt hatte ich versehentlich einige große Bilddateien zu meinem Repo hinzugefügt. Ich lese auf GitHub , wie Sie Dateien aus dem Verlauf entfernen, und es hat funktioniert: Sie können die Dateien im Verlauf nicht mehr sehen. Aber dann habe ich eine tar.gz
von meinem Projekt für die Sicherung, und es ist jetzt zweimal die Größe, die es zu haben! Ich habe nichts hinzugefügt, was diese Erhöhung rechtfertigen könnte, daher ist mein Verdacht, dass die Repo-Daten, die die Bilddateien repräsentierten, nicht wirklich aus dem Repo geworfen wurden. Kann das jemand bestätigen? Gibt es eine Lösung?Wie kann ich Daten vollständig aus einem Git-Repository entfernen?
bearbeiten zu klären, ich über git recht wenig wissen, so dass ich genau wie auf den GitHub help pages angegeben, die Schritte unternahm, mit der einzigen Ausnahme, dass ich weiter einen force
Wechsel von der zweiten Datei verwenden musste, wie in git filter-branch -f --index-filter ...
.
teilweise meine eigene Frage zu beantworten, ich glaube, ich von
- Erstellen einer leeren Repo an einem anderen Ort
- Wiedergabe der Datei Situation in verschiedenen Schritten ein zweites git Repo ohne die unerwünschten Materialien schaffen könnten von mein Projekt, unerwünschte wegzulassen
- und schließlich das neue Repo anstelle der alten zu verwenden, um Materialien zu GitHub zu schieben.
hat das schon mal gemacht? Kann ich das neue Git Repo anstelle des alten mit dem gleichen Projekt auf GitHub verwenden?
BTW, für das, was es wert ist, ist dies über a presentation Ich schreibe gerade; Dort ist ein Bild des Turms von Babel drin, das in mehreren Versionen in hoher Auflösung existierte, was die Größe des Problems erklärt (~ 100MB an unerwünschten Daten).
bearbeiten 2 thx viel für Vorschläge; ich habe
rm -rf .git/refs/original/
git reflog expire expire=now --all
git reflog expire --all
git gc --aggressive --prune=now
mit dem Effekt, dass die *.tar.gz
Größe um lediglich 0,5% kleiner bekam ...
bearbeiten 3 es die schiere Komplexität zu erleben ist entmutigend, die git ist. Ich gebe an diesem Punkt auf. Ich habe einen Test mit einem kleinen Einweg-Repo gemacht; ich habe eine erste begehen, eine große Datei hinzugefügt, hat ein Commit, entfernt die Datei und versucht, seine Spuren aus dem Speicher mit
rm very-big-file.xcf
git filter-branch --index-filter 'git rm --cached --ignore-unmatch very-big-file.xcf' --prune-empty -- --all
rm -rf .git/refs/original/
git reflog expire --all
git gc --aggressive --prune=now
diese sind die aufgezeichneten *.tar.gz
Größen zu löschen:
foo.tar.gz 7,518
foo2.tar.gz 65,735,003
foo3.tar.gz 32,777,155
die große Datei komprimiert Größe ist 32.955.246 Bytes, die es völlig plausibel macht, dass es immer noch vollständig unter .git
, vielleicht sogar in unkomprimierter Form vorhanden ist.
GIT Y U SO STUBBORN ??
Gibt es keine git purge
Erweiterung, um dies zu tun? Ich meine, git filter-branch --index-filter 'git rm --cached --ignore-unmatch very-big-file.xcf' --prune-empty -- --all
ist nicht genau das, was ich aus dem Speicher eingeben könnte, wenn ich einen leichten Kater habe.
Können Sie möglicherweise ein wenig mehr darüber hinzufügen, wie Sie sie entfernt haben? Hast du 'git gc' laufen lassen? Haben Sie es mit 'git rm --cached' aus dem Index entfernt? – Nic
@CaptainGiraffe, das ist in diesem Fall nicht notwendig. – Nic
Sie haben die 'git filter-branch' Anweisungen befolgt und es in allen Zweigen gemacht, richtig? Hast du dann die Schritte 'rm -rf .git/refs/original /' und 'git reflog expire = now --all' und 'git gc --prune = now 'gemacht? – torek