До яких «пухких об’єктів» відноситься графічний інтерфейс Git?


219

Коли я відкриваю графічний інтерфейс Git , я отримую спливаюче повідомлення, на яке посилається loose objects. Я це зробив, git gcі це повідомлення видалили.

Що таке loose objectsі як я можу запобігти повторному виникненню цього?


Ви можете просто натиснути кнопку "Так" у спливаючому повідомленні, коли воно запитує, чи потрібно розпакувати вільні об'єкти зараз. Git GUI буде працювати git gcдля вас з гарною панеллю прогресу графічного інтерфейсу (хоча вона показана як застрягла більшість часу).
ADTC

Відповіді:


144

Об'єкт (краплі, дерева та коміри) із SHA кажуть - 810cae53e0f622d6804f063c04a83dbc3a11b7ca буде зберігатися у

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(розбиття на перші два символи для поліпшення продуктивності файлової системи, оскільки зараз не всі об'єкти зберігаються в одному каталозі)

Об'єкти, що зберігаються, як зазначено вище, називаються пухкими об'єктами.

Коли ви починаєте з репо, у вас в основному є пухкі предмети. Коли кількість збільшується, вона стає неефективною, і вони зберігаються у файлі пакету. Такі об'єкти називають упакованими об'єктами.

 git gc

це те, що ви запускаєте для упаковки об'єктів (Зазвичай нещільні об'єкти, які не потрібні і кілька тижнів, також видаляються, і за допомогою цього --prune=<date>параметра ви можете примусово видалити вільні об'єкти, які більше не потрібні. Як, коли ви змінюєте комісію. Старий об’єкт фіксації - ні більше потрібно.)


3
Цей --pruneпараметр увімкнено за замовчуванням, і оскільки git gcце автоматично спрацьовує при загальному використанні (наприклад commit), вам зазвичай не потрібно про це турбуватися. Я не використовую git gui, і не можу точно знайти, де він запускається в джерелі, але або він робить свою власну перевірку, або просто перехоплює gcвикликане командою, що викликається. Це, звичайно, не про що турбуватися, що тільки викликано звичайним використанням.
Каскабель

21
чи є якийсь недолік для пакування сипучих предметів? Якщо ні, то чому Git не робить це автоматично?
Луї Ріс

13
Я не думаю, що це правда, що це відбувається автоматично. Я погоджуюсь часто, але в згадуваному "git gui" було 50 000 пухких об'єктів (і мені цікаво, чому git був такий проклятий повільний, великий проект за ~ 4 роки без ручного gc)
Кевін

1
@Kevin Чи покращилась ефективність вашого великого проекту після запуску git gcвручну? Я думаю, що це повинно вдосконалюватися, оскільки пухкі об’єкти неефективні, а 50 000 - це дуже велика кількість. Я також з'ясував, що упаковка значно скорочує також простір, який використовується .gitпапкою.
ADTC

3
@LouisRhys, "Коли об'єкти записуються на диск, він часто буває у вільному форматі, оскільки доступ до цього формату є менш дорогим. Однак, зрештою, ви захочете заощадити простір, запакувавши об'єкти" - від Git Book посилання у відповідь нижче
chris

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.