git gcуже делает это, git repackпоэтому нет смысла вручную переупаковывать, если вы не собираетесь передавать ему какие-то специальные параметры.
Первый шаг - проверить, занимает ли большая часть пространства (как обычно) ваша объектная база данных.
git count-objects -v
Это должно дать отчет о том, сколько распакованных объектов находится в вашем репозитории, сколько места они занимают, сколько у вас упакованных файлов и сколько места они занимают.
В идеале после переупаковки у вас не будет распакованных объектов и одного файла пакета, но совершенно нормально иметь некоторые объекты, на которые не ссылаются напрямую текущие ветки, все еще присутствующие и распакованные.
Если у вас есть одна большая упаковка, и вы хотите знать, что занимает пространство, вы можете перечислить объекты, из которых состоит пакет, а также то, как они хранятся.
git verify-pack -v .git/objects/pack/pack-*.idx
Обратите внимание, что verify-packтребуется индексный файл, а не сам файл пакета. Это дает отчет о каждом объекте в пакете, его истинном размере и его упакованном размере, а также информацию о том, был ли он «дельтифицирован», и если да, то о происхождении дельта-цепочки.
Чтобы увидеть, есть ли в вашем репозитории какие-либо необычно большие объекты, вы можете отсортировать вывод численно по третьему или четвертому столбцу (например | sort -k3n).
Из этого вывода вы сможете увидеть содержимое любого объекта с помощью git showкоманды, хотя невозможно точно увидеть, где в истории фиксации репозитория имеется ссылка на объект. Если вам нужно это сделать, попробуйте что-нибудь из этого вопроса .