Вы можете удалить бинарное раздувание и сохранить остальную часть своей истории. Git позволяет вам переупорядочить и «сквоить» предыдущие коммиты, поэтому вы можете комбинировать только те коммиты, которые добавляют и удаляют большие бинарные файлы. Если все добавленные были сделаны в одном коммите и удалении в другом, это будет намного проще, чем иметь дело с каждым файлом.
$ git log --stat # list all commits and commit messages
Поиск это для фиксаций, что добавлять и удалять двоичные файлы и отметить их SHA1s, скажем 2bcdef
и 3cdef3
.
Затем, чтобы отредактировать историю репо, используйте команду rebase -i
с ее интерактивной опцией, начиная с родителя комманды, где вы добавили свои двоичные файлы.Это запустит ваш $ EDITOR, и вы увидите список фиксаций, начиная с 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
как второй строки и удалить строку, которая говорит pick 3cdef3
из списка. Теперь у вас есть список действий для интерактивного rebase
, который объединит коммиты, которые добавляют и удаляют ваши двоичные файлы в один коммит, diff - это просто любые другие изменения этих коммитов. Тогда это будет повторно все последующие фиксаций в порядке, когда вы говорите, что для завершения:
$ git rebase --continue
Это займет минуту или две.
Теперь у вас есть репо, которое больше не имеет двоичных файлов, идущих или идущих. Но они по-прежнему занимают место, потому что, по умолчанию, Git сохраняет изменения в течение 30 дней, прежде чем они могут быть собраны в мусор, чтобы вы могли передумать. Если вы хотите, чтобы удалить их сейчас:
$ 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
Теперь вы удалили навороты, но сохранили остальную часть истории.
Хорошо и ответит. – JesperE 2008-11-02 17:01:10
Вам просто нужно помнить, что другие люди уже вытащили из этого хранилища, переписывая историю, это путает их тягу. В руководстве git-rebase объясняется, как восстановить эти другие репозитории. http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html – Otto 2009-01-24 16:26:17