в моем проекте я по ошибке добавил несколько больших файлов изображений в репо. я читал о GitHub
как удалить файлы из истории, и это сработало: вы больше не можете видеть файлы в истории. НО тогда я сделал tar.gz
из моего проекта для резервного копирования, и теперь он в два раза размер, который у него был раньше! я не добавил ничего другого, что могло бы оправдать это увеличение, поэтому я подозреваю, что данные репо, которые использовались для представления файлов изображений, действительно не выбрасывались из репо. кто-нибудь может это подтвердить? есть ли исправление?
edit чтобы уточнить, я довольно мало знаю о git, поэтому я предпринял шаги, указанные на страницах справки GitHub , с единственным исключением, что мне пришлось использовать force
перейти от второго файла и далее, как в git filter-branch -f --index-filter ...
.
чтобы частично ответить на мой собственный вопрос, я думаю, что мог бы создать второе git-репо без нежелательных материалов к
- создание пустого репо в другом месте
- Воспроизведение файловой ситуации на разных этапах моего проекта, исключая ненужные
- и, наконец, используйте этот новый репо вместо старого, чтобы отправлять материалы в GitHub.
это было сделано раньше? в частности, могу ли я использовать этот новый git-репо вместо старого с тем же проектом на GitHub?
кстати, это примерно 1028 * презентация я пишу прямо сейчас; есть
изображение вавилонской башни, существовавшей в нескольких версиях в высоком разрешении, что объясняет размер проблемы (~ 100 МБ нежелательных данных).
редактировать 2 спасибо за предложения; я сделал
rm -rf .git/refs/original/
git reflog expire expire=now --all
git reflog expire --all
git gc --aggressive --prune=now
с тем эффектом, что размер *.tar.gz
уменьшился всего на 0,5% ...
редактировать 3 это ужасно испытать явную сложность, которая является мерзавцем. Я сдаюсь в этой точке. я сделал тест с маленьким одноразовым репо; я сделал первоначальный коммит, добавил большой файл, сделал коммит, удалил файл и попытался стереть его следы из памяти с помощью
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
это записанные *.tar.gz
размеры:
foo.tar.gz 7,518
foo2.tar.gz 65,735,003
foo3.tar.gz 32,777,155
размер большого файла, сжатого , составляет 32 955 246 байт, что делает вполне вероятным, что он все еще полностью присутствует в .git
, возможно, даже в несжатом виде.
GIT Y U SO STUBBORN ??
нет ли расширения git purge
для этого? я имею в виду, git filter-branch --index-filter 'git rm --cached --ignore-unmatch very-big-file.xcf' --prune-empty -- --all
- это не совсем то, что я мог набрать из памяти, когда у меня небольшое похмелье.