1. Git хранит только разницу между версиями файла, а не полные копии. Таким образом, каждый коммит содержит информацию о том, какие конкретно изменения были внесены в файл относительно предыдущей версии. 2. Переключение между ветками не копирует файлы из базы данных, а меняет указатель на коммит в вашем репозитории. Индекс также не копируется при переключении веток, поскольку он отображает состояние файлов текущей ветки. Git не копирует файлы, если они не были изменены. 3. При клонировании репозитория сначала копируется вся история коммитов и веток из удаленного репозитория, затем файлы из последнего коммита выбранной ветки копируются в ваш локальный рабочий каталог. Индекс также создается на основе файлов последнего коммита.
4. Все файлы в Git хранятся в трех областях: рабочий каталог, индекс (stage) и репозиторий (database). Рабочий каталог содержит актуальные версии файлов, с которыми вы работаете. Индекс содержит информацию об изменениях, которые будут включены в следующий коммит. Репозиторий содержит все версии файлов и историю изменений. 5. Файлы в репозитории Git хранятся в виде сжатых объектов, каждый из которых представляет собой содержимое файла в определенный момент времени. Объекты хранятся в директории .git/objects и идентифицируются хэш-кодами SHA-1. 6. Git имеет механизмы для работы с большими файлами, такими как Git LFS (Large File Storage), который позволяет хранить большие файлы в отдельных репозиториях и обрабатывать их эффективно. Git LFS заменяет большие файлы ссылками на хэши, что помогает уменьшить размер самого репозитория. Таким образом, Git обладает эффективной системой хранения и контроля версий файлов, что делает его популярным выбором для разработчиков и команд, работающих над проектами любого масштаба.
1. Гит хранит только изменения файлов, не целые копии. Целые копии хранит SVN
2. Сравнение файлов происходит через сравнение хэша файла. История изменений хранится в виде графа, поэтому переключение - это по сути: 1. Найти общего предка 2. Откатиться до этого предка 3. Применить изменения до новой ветки. Дополнительно, если у тебя есть незакоммиченные текущие изменения, то гит тебе об этом скажет
3. Скачивается вся история изменений из удаленного репозитория и потом HEAD выставляется на ветку, которую клонировал (в основном это main/master)
Почитай как работает git