Ich habe versehentlich eine riesige Binärdatei mit meinem neuesten Commit in ein Git-Repository hinzugefügt, festgeschrieben und gepusht.Wie unbenutzte Objekte aus einem Git-Repository entfernen?
Wie kann ich Git die Objekte entfernen lassen, die für diesen Commit erstellt wurden/wurden, so dass mein .git
Verzeichnis wieder auf normale Größe schrumpft?
Bearbeiten: Danke für Ihre Antworten; Ich habe mehrere Lösungen ausprobiert. Keine funktioniert. Zum Beispiel von GitHub derjenige entfernt, um die Dateien aus der Geschichte, aber die .git
Verzeichnisgröße nicht verringert hat:
$ BADFILES=$(find test_data -type f -exec echo -n "'{}' " \;)
$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $BADFILES" HEAD
Rewrite 14ed3f41474f0a2f624a440e5a106c2768edb67b (66/66)
rm 'test_data/images/001.jpg'
[...snip...]
rm 'test_data/images/281.jpg'
Ref 'refs/heads/master' was rewritten
$ git log -p # looks nice
$ rm -rf .git/refs/original/
$ git reflog expire --all
$ git gc --aggressive --prune
Counting objects: 625, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (598/598), done.
Writing objects: 100% (625/625), done.
Total 625 (delta 351), reused 0 (delta 0)
$ du -hs .git
174M .git
$ # still 175 MB :-(
Nur eine Erinnerung für Moderatoren, diese Frage zu 100% gehört auf SO, nicht Superuser. – VonC
Siehe auch http://stackoverflow.com/questions/2116778/reduce-git-repository-size/2116892#2116892 und http://stackoverflow.com/questions/685319/git-pull-error-unable-to-create -temporary-sha1-filename/685422 # 685422 – VonC
Wie hier erwähnt (http://stackoverflow.com/questions/685319/git-pull-error-unable-to-create-temporary-sha1-filename/685422#685422), hast du einen repack nach deinem gc versucht? 'git-repack -a' gefolgt von' git-prune-packed' zum Beispiel. Siehe http://blog.felipebalbi.com/2007/12/19/housekeeping-your-git-repository/ – VonC