К каким «незакрепленным объектам» относится графический интерфейс Git?


219

Когда я открываю Git GUI , я получаю всплывающее сообщение, которое ссылается на loose objects. Я сделал, git gcи это удалило сообщение.

Что loose objectsи как я могу предотвратить, чтобы это не повторилось?


Вы можете просто нажать «Да» во всплывающем сообщении, когда он спросит, нужно ли упаковывать свободные объекты сейчас. Git GUI будет работать git gcдля вас, с хорошим индикатором выполнения GUI (хотя в большинстве случаев он отображается как застрявший).
ADTC

Ответы:


144

Объект (BLOB, деревья и коммиты) с SHA скажем - 810cae53e0f622d6804f063c04a83dbc3a11b7ca будет храниться в

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(разделение на первые два символа для повышения производительности файловой системы, поскольку теперь не все объекты хранятся в одном каталоге)

Объекты, хранящиеся как указано выше, называются свободными объектами.

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

 git gc

это то, что вы запускаете, чтобы упаковать объекты (Обычно свободные объекты, которые не нужны и несколько недель назад, также удаляются, и с --prune=<date>опцией вы можете принудительно удалить свободные объекты, которые больше не нужны. Например, когда вы изменяете коммит. Старый объект фиксации не больше не нужно.)


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

21
есть ли какие-то недостатки упаковки сыпучих предметов? Если нет, то почему Git не делает это автоматически?
Луис Рис

13
Я не думаю, что это правда, что это происходит автоматически. Я часто совершаю коммиты, но в упомянутом «git gui» было 50000 незакрепленных объектов (и мне было интересно, почему git был таким чертовски медленным, большой проект за ~ 4 года без ручного gc)
Кевин

1
@Kevin Повысилась ли производительность вашего крупного проекта после запуска git gcвручную? Я думаю, что это должно улучшиться, потому что потерянные объекты неэффективны, а 50 000 - это очень большое число. Я также обнаружил, что упаковка значительно уменьшает пространство, используемое .gitпапкой.
ADTC

3
@LouisRhys, «Когда объекты записываются на диск, он часто находится в свободном формате, так как доступ к этому формату менее затратный. Однако, в конечном итоге вы захотите сэкономить место за счет упаковки объектов» - из Git Book ссылка в ответе ниже
Крис

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.