Каковы "свободные объекты", на которые ссылается GUI Git?

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

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

Ответ 1

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

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

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

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

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

 git gc

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

Ответ 2

Книга Git объясняет это довольно хорошо: https://git-scm.com/book/en/v2/Git-Internals-Packfiles

Свободные объекты - это более простой формат. Это просто сжатые данные, хранящиеся в одном файле на диске. Каждый объект записывается в отдельный файл.