Я не понимаю, как git управляет файлами при смене веток:
Когда я бегу
git branch xxx
Что происходит с существующими физическими файлами? Они перемещаются? Удаляется? Хранится в БД? Git включает магию файловой системы?
Я не понимаю, как git управляет файлами при смене веток:
Когда я бегу
git branch xxx
Что происходит с существующими физическими файлами? Они перемещаются? Удаляется? Хранится в БД? Git включает магию файловой системы?
Когда вы запускаете git branch xxx
, Git только создает новую ветку, но фактически не переключается на нее - рабочее дерево вообще не изменяется. (Обратите внимание, что новая ветвь будет иметь те же файлы и историю, что и старая.)
Когда вы запускаете git checkout xxx
для переключения веток, файлы из новой ветки извлекаются из "базы данных объектов", которая является архивом, хранящимся в .git/objects/
который содержит сжатые оригиналы каждого файла в каждом коммите. (Там же хранятся коммиты.)
Файлы, принадлежащие старой ветке, но отсутствующие в новой, просто удаляются (потому что они уже существуют в хранилище объектов, поэтому Git может просто извлечь их заново, если вы переключитесь обратно).
Когда некоторые файлы идентичны между ветками, git checkout
вообще не трогает (без удаления / повторного извлечения). Таким образом, ваши незафиксированные изменения могут остаться в кассе.