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 не нужно хэшировать ваши файлы при создании коммита, поскольку они хэшируются и сохраняются при добавлении их в индекс.