Git - это модная файловая система с адресацией содержимого. Условно , в нем хранится полное содержимое каждого файла в каждой ревизии, и каждый большой двоичный объект (содержимое файла) имеет свой символ, которым его можно получить. Под капотом у git фактически есть возможность сохранять файл как diff для аналогичного файла (обычно это предыдущая версия, но это не обязательно должно быть), но это происходит полностью на самом низком уровне того, как git хранит файлы , Мало того, что пользователям git не нужно думать об этом, даже большинству инструментов git не нужно думать об этом.
Что касается вопроса о размере, , потому что в "git filesstem" есть различные формы сжатия, и, поскольку они довольно эффективны, каталог .git
, содержащий всю историю проекта обычно меньше, чем единичная проверка кода , пока проект не достигнет сотен тысяч коммитов.
Если хранилище становится неуправляемо большим, можно (с помощью таких инструментов, как git graft
) разделить историю проекта на разные репозитории по линиям новой / древней истории, активным / архивным ветвям или другим такие вещи.