Обновление: git prune
«решит» проблему, поскольку удалит эти незакрепленные объекты
( git gc
вызовы git prune
, но только для незакрепленных объектов старше двух недель по умолчанию).
Однако, как отмечает ОП Майкл Донохью в комментариях:
Мне нравится аспект безопасности, заключающийся в хранении незакрепленных предметов в течение двух недель, если я захочу вернуться и взглянуть на некоторые старые версии, поэтому мне не очень нравится это решение.
У меня нет проблем с размером или производительностью git, это просто git gui настаивает на том, чтобы я просил меня сжать базу данных, даже если сжатие базы данных не повлияет.
Оригинальный ответ:
О проблеме git gc
"не удаления всех незакрепленных объектов" сообщалось и раньше (в конце 2008 г. " " git gc
"" больше не удаляет незакрепленные объекты "
git gc
удаляет только незакрепленные объекты старше двух недель, если вы действительно хотите удалить их сейчас, запустите git prune.
Но убедитесь, что никакой другой процесс git не может быть активен, когда вы его запускаете, иначе он может наступить на что-то.
" git gc
" распакует объекты, которые стали недоступны и в данный момент находились в пакетах.
В результате объем дискового пространства, используемого репозиторием git, может значительно увеличиться после " git gc
" операции, что может быть неожиданным для тех, кто почти полностью работает в своей файловой системе, удаляя несколько веток из репозитория отслеживания. , и тогда вообще " git gc
" может получиться весьма неприятный сюрприз.
[
Пример: ]
старые ветки зарезервированы с помощью тега, например next-20081204
.
Если вы обновляете локальную копию linux-next
репозитория каждый день, вы накапливаете большое количество этих старых тегов веток.
Если вы затем удалите их целую серию и запустите git-gc
, операция займет довольно много времени, и количество используемых блоков и inode значительно вырастет.
Они исчезнут после " git prune
", но когда я выполняю эту служебную операцию, мне часто хотелось иметь --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
возможность "git gc".
Так что в вашем случае было git prune
бы полезно ""?
(возможно, с использованием «сейчас» в gc.pruneexpire
переменной конфигурации, необходимого для выполнения вышеуказанного поведения).
У вас также есть (из той же ветки):
repack -a -d -l
Обратите внимание на строчную букву «а».
git-gc
вызывает repack с прописной буквой «A», что вызывает распаковку недостижимых объектов. Маленькая буква «а» предназначена для людей, которые знают, что делают, и хотят, чтобы git просто отбрасывал недостижимые объекты.