Git сохранить все версии файла, добавленные с помощью команды index update-index?

Я пытаюсь понять команду git для слесарного дела и как ее низкоуровневые действия создают высокоуровневые действия, такие как add и commit.

Я знаю, что каждый раз, когда я использовал:

git update-index file.txt

я создаю блоб из этого файла и создаю ссылку (имя файла и ключ SHA1, записанные вместе) в индексе (конечно, только если файл изменен). Если я делаю коммит, я создаю дерево, которое указывает только на один BLOB-объект (я менял только один файл).

Но в базе данных.git/objects хранится не один, а более (например, пять или шесть) больших двоичных объектов, созданных командой update-index из этого одного файла, которые не указаны ни одним деревом, указанным каким-либо объектом коммита. Git должен сохранять только этот BLOB-объект, который находится на снимках, созданных коммитом.

У Git есть какая-то автоматическая сборка мусора, которая может удалить неконечный блоб в будущем? А команда update-index является полным эквивалентом команды add?

1 ответ

Git имеет процесс сборки мусора, который автоматически вызывается другими командами (например, commit и pull) через определенный интервал или может быть вызван вручную, запустив git gc, который, помимо прочего, будет очищать базу данных объектов, удаляя объекты, на которые не ссылается другой объект или указатель ветви / тега.

Команда git update-index это сантехника под фарфором git add команда.

Этот двухэтапный процесс также позволяет ускорить процесс создания коммита, поскольку git не нужно хэшировать ваши файлы при создании коммита, поскольку они хэшируются и сохраняются при добавлении их в индекс.

Другие вопросы по тегам