Добавление шестого ответа может быть немного бесполезным на данный момент, но я написал что-то вроде этого для учебника, и я думаю, что важно, чтобы ответ на этот вопрос четко объяснил стандартную схему голого и не гологорепозитории.
Обычно с git вы будете использовать непокрытый репозиторий или репозиторий с рабочим деревом .По умолчанию каталог, содержащий каталог .git
, будет находиться на верхнем уровне вашего рабочего дерева для этого репозитория.Например, если вы создали такой репозиторий в каталоге с именем toaster-simulator
, структура каталога может выглядеть следующим образом:
toaster-simulator/
.git/
HEAD
config
index
objects/
refs/
...
README
Makefile
src/
toaster.c
На верхнем уровне вашего каталога находится только один каталог .git
.репозиторий. 1 Этот каталог содержит всю историю вашего репозитория, все его ветви, объекты, которые составляют каждый файл каждого коммита в вашей истории, и т. д. (Например, каталог .git/objects
содержитбаза данных, которая отображает имена объектов в файлы, коммиты и т. д .; HEAD
указывает на текущую ветку и т. д.) Никогда не следует вручную удалять или изменять файлы в этом каталоге, иначе вы рискуете повредить ваш репозиторий.Все, что находится за пределами каталога .git
, является вашим рабочим деревом.Вы просто отредактируете эти файлы в обычном режиме при разработке проекта.
Возможно, для новичков в git самое удивительное, что если вы переключаетесь с одной ветви на другую, файлы в вашем рабочем дереве могут полностьюменять.Хотя это может вызывать тревогу в первый раз, когда вы его видите, это отличная функция - вам почти никогда не нужно иметь более одной копии репозитория на вашем компьютере, поскольку переключение из одной ветви в другую происходит очень быстро и просто.(Чтобы предотвратить потерю данных, git не позволит вам переключать ветки, подобные этой, если у вас есть изменения в вашем рабочем дереве, которые не были записаны в коммите, и эти изменения находятся в файлах, которые будут каким-либо образом измененыпереключатель ветки. После того как вы создали коммит с вашими файлами в определенном состоянии, git очень затрудняет вам потерю этих файлов.)
Другой тип репозитория - голое хранилище , что по сути похоже на каталог .git
, но без рабочего дерева.Обычно вы используете это для репозитория, в который многие люди будут вносить свои изменения - вы не будете разрабатывать этот репозиторий, поэтому рабочее дерево будет только мешать.Условно вы бы назвали каталог, содержащий пустой репозиторий, с именем проекта и расширением .git
.Например, на удаленном сервере у вас может быть пустой репозиторий для проекта симулятора тостера, который выглядит следующим образом:
toaster-simulator.git/
HEAD
config
index
objects/
refs/
...
Когда вы впервые используете git, вам, вероятно, не понадобится использовать bareрепозитории, но хорошо знать о них.Когда вы спрашиваете в своем вопросе о возможности иметь репозитории за пределами вашего рабочего дерева, они вполне могут быть пустыми репозиториями, которые вы используете для обмена кодом с другими людьми.
Я описал выше обычный макет репозитория, но на самом деле каталог git и рабочее дерево могут быть любыми двумя каталогами в вашей файловой системе, если вы используете для git определенные переменные или параметры среды - однако это выходит за рамки базового использования git:)
Сноски
1 Фактически можно иметь вложенные репозитории, каждый со своим каталогом .git
, например, с помощью функции подмодуля git.Однако, учитывая ваш вопрос, вам не нужно беспокоиться об этом на данный момент.