Відповіді:
Об'єкт (краплі, дерева та коміри) із SHA кажуть - 810cae53e0f622d6804f063c04a83dbc3a11b7ca буде зберігатися у
.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca
(розбиття на перші два символи для поліпшення продуктивності файлової системи, оскільки зараз не всі об'єкти зберігаються в одному каталозі)
Об'єкти, що зберігаються, як зазначено вище, називаються пухкими об'єктами.
Коли ви починаєте з репо, у вас в основному є пухкі предмети. Коли кількість збільшується, вона стає неефективною, і вони зберігаються у файлі пакету. Такі об'єкти називають упакованими об'єктами.
git gc
це те, що ви запускаєте для упаковки об'єктів (Зазвичай нещільні об'єкти, які не потрібні і кілька тижнів, також видаляються, і за допомогою цього --prune=<date>
параметра ви можете примусово видалити вільні об'єкти, які більше не потрібні. Як, коли ви змінюєте комісію. Старий об’єкт фіксації - ні більше потрібно.)
--prune
параметр увімкнено за замовчуванням, і оскільки git gc
це автоматично спрацьовує при загальному використанні (наприклад commit
), вам зазвичай не потрібно про це турбуватися. Я не використовую git gui, і не можу точно знайти, де він запускається в джерелі, але або він робить свою власну перевірку, або просто перехоплює gc
викликане командою, що викликається. Це, звичайно, не про що турбуватися, що тільки викликано звичайним використанням.
git gc
вручну? Я думаю, що це повинно вдосконалюватися, оскільки пухкі об’єкти неефективні, а 50 000 - це дуже велика кількість. Я також з'ясував, що упаковка значно скорочує також простір, який використовується .git
папкою.
Книга Git досить добре пояснює це: https://git-scm.com/book/en/v2/Git-Internals-Packfiles
Сипучі об'єкти - простіший формат. Це просто стислі дані, що зберігаються в одному файлі на диску. Кожен об'єкт записаний у окремий файл.
git gc
для вас з гарною панеллю прогресу графічного інтерфейсу (хоча вона показана як застрягла більшість часу).