Sie können das binäre Aufblähen entfernen und den Rest Ihres Verlaufs behalten. Mit Git können Sie frühere Commits neu anordnen und "quetschen", sodass Sie nur die Commits kombinieren können, die Ihre großen Binärdateien hinzufügen und entfernen. Wenn die Hinzufügungen alle in einem Commit und die Entfernungen in einem anderen durchgeführt wurden, ist dies viel einfacher als der Umgang mit jeder Datei.
$ git log --stat # list all commits and commit messages
Suchen Sie hier nach den Commits, die Ihre Binärdateien hinzufügen und löschen, und notieren Sie sich deren SHA1s, z . B. 2bcdef
und 3cdef3
.
Verwenden Sie dann zum Bearbeiten des Repo-Verlaufs den rebase -i
Befehl mit seiner interaktiven Option, beginnend mit dem übergeordneten Element des Commits, in dem Sie Ihre Binärdateien hinzugefügt haben. Es wird Ihr $ EDITOR gestartet und Sie sehen eine Liste der Commits, beginnend mit 2bcdef
:
$ git rebase -i 2bcdef^ # generate a pick list of all commits starting with 2bcdef
# Rebasing zzzzzz onto yyyyyyy
#
# Commands:
# pick = use commit
# edit = use commit, but stop for amending
# squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
pick 2bcdef Add binary files and other edits
pick xxxxxx Another change
.
.
pick 3cdef3 Remove binary files; link to them as external resources
.
.
squash 3cdef3
Als zweite Zeile einfügen und die Zeile mit der Aufschrift pick 3cdef3
aus der Liste entfernen . Sie haben jetzt eine Liste von Aktionen für das Interaktive rebase
, die die Commits, die Ihre Binärdateien hinzufügen und löschen, zu einem Commit zusammenfassen, dessen Unterschied nur alle anderen Änderungen in diesen Commits sind. Dann werden alle nachfolgenden Commits der Reihe nach erneut angewendet, wenn Sie anweisen, dass sie abgeschlossen werden sollen:
$ git rebase --continue
Dies dauert ein oder zwei Minuten.
Sie haben jetzt ein Repo, in dem die Binärdateien nicht mehr kommen oder gehen. Sie beanspruchen jedoch weiterhin Speicherplatz, da Git Änderungen standardmäßig 30 Tage lang aufbewahrt, bevor sie mit Müll gesammelt werden können, sodass Sie Ihre Meinung ändern können. Wenn Sie sie jetzt entfernen möchten:
$ git reflog expire --expire=1.minute refs/heads/master
#all deletions up to 1 minute ago available to be garbage-collected
$ git fsck --unreachable # lists all the blobs(files) that will be garbage-collected
$ git prune
$ git gc
Jetzt haben Sie das Aufblähen entfernt, aber den Rest Ihrer Geschichte beibehalten.