Проблема: вы удалили ветки, сделали git reset, отменили мёржи, но репозиторий почему-то весит всё больше. git clone на новом месте занимает вечность. Куда уходит место?
Дело в том, что Git — барахольщик. Он хранит все объекты: старые блобы, недостижимые коммиты, забытые stash'ы. Даже то, что вам давно не нужно.
💡 Решение: git gc и его старший брат git gc --aggressive
Рассмотрим все все возможности git gc.
1️⃣ Сколько мусора накопилось
git count-objects -vH
Обратите внимание на size-pack — это реальный вес вашего репо.
2️⃣ Самые тяжёлые объекты в истории
git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| awk '/^blob/ {print $3, $4}' \
| sort -rn \
| head -10
Часто находятся артефакты сборки, дампы БД или случайно закоммиченные .jar на 200 МБ 😬
3️⃣ Запустите агрессивную сборку мусора
git gc --aggressive --prune=now
--aggressive заставляет Git перепаковать объекты с нуля, а --prune=now удаляет недостижимые объекты немедленно, не дожидаясь дефолтных двух недель.
4️⃣ Сравните результат
git count-objects -vH
На живых проектах с историей в 2+ года разница бывает в разы.
⚠️ --prune=now безвозвратно удалит объекты, на которые нет ссылок. Если вы планировали восстановить что-то через git reflog — сделайте это до запуска.