Оновлення: 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
, операція займе досить багато часу, а кількість використаних блоків та вкладів значно зросте.
Вони зникнуть після " 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
перекликає перезарядку з великого регістру "A", саме це призводить до розпакування недоступних об'єктів. Маленьке «а» - це для людей, які знають, що роблять, і хочуть, щоб git просто кидав недоступні об’єкти.