LINUX.ORG.RU

Перезаписать историю на GitHub

 , ,


1

1

Когда я только начинал работу с git, я делал глупость - добавлял в коммит бинарные файлы. С тех пор проект разросся до 300 Мб, и делать git clone стало долго. Я воспользовался утилитой bfg и удалил файлы >1 Мб, затем сделал git gc –aggressive –prune=now, что позволило уменьшить размер локального репозитория до 18 Мб. Это позволило сохранить историю (что я и хочу сделать). git push -f, однако, не привело к удалению неиспользуемых файлов с удаленного репозитория (GitHub). Как мне полностью синхронизировать файлы?

Как мне полностью синхронизировать файлы?

git push --all --prune --force

Возможно поможет. Выполнять только осторожно нужно и про бекап не забывать.

EXL ★★★★★
()
Ответ на: комментарий от urxvt

Я его иногда делаю, а не часто. Завожу виртуалку со старой ОС, чтобы сделать appimage, далее git clone и собираю.

anonymizer
() автор топика

Скорее всего надо просить поддержку github сделать сборку мусора на стороне сервера.

xaizek ★★★★★
()
Ответ на: комментарий от anonymizer

https://stackoverflow.com/questions/4367977/how-to-remove-a-dangling-commit-from-github/

После удаления файлов хеши коммитов поменялись и коммиты с огромными файлами повисли (dangling). Скорее всего только связываться с поддержкой.

Если тебе нечего терять типа форков и звёзд, можно просто удалить репозиторий и создать новый, влив в него новый слепок репозитория без огромных коммитов. При этом вся твоя активность с dashboard’а никуда не пропадёт, но изменится дата создания репозитория.

EXL ★★★★★
()
Ответ на: комментарий от anonymizer

Пишет «Everything up-to-date», однако, по-прежнему скачивается 300 Мб.

Ммм, а если сделать коммит в репозитории и на GitHub отправить его через:

git push --all --prune --force

Просто если там up-to-date состояние оно могло и не запуститься.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Нет, не помогает.

Перечисление объектов: 9, готово.
Подсчет объектов: 100% (9/9), готово.
При сжатии изменений используется до 2 потоков
Сжатие объектов: 100% (5/5), готово.
Запись объектов: 100% (5/5), 446 bytes | 223.00 KiB/s, готово.
Всего 5 (изменения 4), повторно использовано 0 (изменения 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To ssh://github.com/sklprogs/mclient.git
   c7fbc16..b36462a  master -> master
По-прежнему git clone скачивает сотни мегабайт.

anonymizer
() автор топика

А я б грохнул репу и пересоздал.

dimgel ★★★★★
()
Ответ на: комментарий от EXL

prune

Но до --expire / git gc все данные по-прежнему остаются в репозитории, если не ошибаюсь. А на удалённой репе вызвать сборку мусора вручную нельзя (интересно, есть ли смысл в этом абсолютном запрете, или это недочёт в дизайне git).

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 1)

Я воспользовался утилитой bfg и удалил файлы >1 Мб

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch *.zip" --prune-empty --tag-name-filter cat -- --all
anonymous
()
Ответ на: комментарий от menangen

У него вебинтерфейс тормозной. Хз как народ пулл реквесты в нём просматривает и не дохнет от скуки во время ожидания прогрузки страницы.

grem ★★★★★
()

push -f достаточно, если конечно у тебя не осталось других ref’ов (веток, тэгов), которые содержат удалённые commit’ы. А если тебя беспокоит что сами удалённые объекты на GH остались (т.е. доступны по хэшу) - то это уже исключительно проблема GH, возможно они лениво их чистят, возможно нет.

slovazap ★★★★★
()

С тех пор проект разросся до 300 Мб, и делать git clone стало долго

300 метров гит это еще не долго. Вот hg на 50 гиг это долго.

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

С тех пор проект разросся до 300 Мб

Покосился на portage tree

grem ★★★★★
()
Ответ на: комментарий от anonymizer

А если сделать новую ветку, перенести туда данные, а старую удалить?

Очень вряд ли, что это поможет. Повисшие коммиты в БД на стороне сервера останутся висеть всё равно.

EXL ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Просто монорепа крупной компании. Плюс ты историю за 10-15 лет не учитываешь. 50 гиг это еще не предел.

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

ты историю за 10-15 лет не учитываешь.

Просто git ещё не дошёл до той степени развития, кода нижнюю часть истории мож назначать «невозвратной». Когда это станет посебол размеры реп резко упадут.

anonymous
()

Пересоздал репу, помогло.

anonymizer
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.