Куда уходят папки и файлы при смене ветки Git или переход на другой комит, в локальном репозитории?
Интересно, куда уходят папки и файлы при смене ветки Git или переход на другой комит, в локальном репозитории?
Ответы (3 шт):
Вопрос, конечно, интересный
Я думаю, git перезаписывает файлы, а если необходимо - удаляет/создаёт их
В репозитории есть два типа файлов, назовем их файлы проекта и файлы системы управления версиями (т.е. в нашем случае git). Файлы проекта - те файлы, с которыми напрямую работает разработчик, и файлы git - файлы, которая лежат в папке .git, и разработчик с ними дела не имеет.
Начнем со вторых, т.к. там проще.
В папке .git содержится информация о всех коммитах репозитория. При переходе по коммитам или смене веток (что в принципе тоже переход на другой коммит) с файлами в папке .git совершенно ничего не происходит (кроме разве что содержимого файла HEAD и пары других, но это нас не интересует).
С файлами проекта происходит следующее: файлы, отсутствующие в том коммите/ветке, куда мы переключаемся, просто удаляются (не в корзину!). Файлы, имеющее другое содержание, перезаписываются. Идентичные файлы не трогаются.
Я проверил на большом файле (120 Мб). После добавления коммита папка .git\objects увеличилась приблизительно на 68 Мб, получается, что файлы добавляются в папку .git\objects в сжатом виде и там хранятся. При переключении между ветками файл (если его не было в этой ветке) удаляется из рабочего каталога, а в папке .git\objects остается его сжатая копия, при обратном переключении файл распаковывается в рабочий каталог.