Голый репозиторий, как работает git init --bare
Если набрать git init, то в папку добавится .git и у репозитория будет рабочая директория, а если git init --bare тоже самое, но содержимое не в папке.git,а в той которой выполнили и у этого репозитория нет рабочей директории и в этот репозиторий можно выполнять команды push,pull. Вопрос, у git есть переменная в которой указана рабочая директория? И если есть, тогда можно переопрелелить и он будет следить за другой директорией? И еще вопрос, если на удаленный репозиторий bare кидаются файлы гита (blob, tree) и там нет рабочей директории с файлами, то при клонировании файлы создаются из объектов гита?
Ответы (1 шт):
Это работает немного не так. git репозиторий первичен, а рабочая копия вторична, поэтому связь идет в другую сторону, от рабочей копии к репозиторию.
Он может существовать и без рабочей копии (можно создать git init --bare или сделать clone). К одному репозиторию можно подключить одну или несколько рабочих копий. В качестве рабочей копии можно использовать вообще любую директорию.
При выполнении команды, которая требует рабочую директорию, git ищет привязанный репозиторий в таких местах:
- переменная окружения
GIT_DIR - директория (или файл)
.gitвверх по дереву начиная от текущего каталога. В случае файла, там хранится путь к репозиторию.
С помощью файла или GIT_DIR можно сделать так, чтоб несколько рабочих директорий использовали один и тот же репозиторий.
Что касается файлов и синхронизации. Она всегда делается из объектов гита. В рабочей копии у вас хранится какая-то одна версия файлов, т.е. в разных версиях/ветках у вас могут быть абсолютно разные файлы. И clone/push/pull всегда использует именно репозиторий.