Как правило, в хранилище нет директории «обертывания». Ваши ожидания, что таковые есть, - это то, что вводит вас в заблуждение. По умолчанию Git-репозиторий является каталогом .git
. Ваша песочница или извлеченный материал находятся на том же корневом уровне, что и папка .git
. Когда вы создаете клон, он автоматически проверяет ветку master. Папка .git и извлечение являются фактическим корнем вашего рабочего пространства git.
Обычно Git выводит имя и создает каталог для вашего рабочего пространства, когда вы используете команды clone и git submodule add
. Он создаст каталог и затем поместит git repo (эту папку .git
), а затем извлечет в него файлы основной ветки. Тем не менее, вы можете указать git clone <repo> .
или git clone <repo> <target_dir>
, и Git разместит корень вашего репо и извлечения в любом месте.
Так что, если вы создали репо, как это:
mkdir repo.git
cd repo.git
git init
touch foo
git add foo
git commit -m "Initial commit"
Когда вы позже клонируете его с помощью git clone repo.git
, только по соглашению он помещается в подкаталог с именем repo
, в котором есть файл с именем foo
и каталог .git
. Однако repo является корневым каталогом извлечения, а не текущим (вы можете сказать, что в нем будет каталог .git
). Каталог, из которого вы запускали клон, НЕ будет каталогом, в котором хранится каталог .git
или checkout. Если вы хотите, чтобы вы сделали git clone <repo> .
, то вы увидите только файл с именем foo
и каталог с именем .git
, а не каталог с именем repo.
Если вы хотите, чтобы всегда существовал каталог с именем repo, в который вложен весь источник, то вы бы создали репозиторий следующим образом:
mkdir repo.git
cd repo.git
git init
mkdir repo
cd repo
touch foo
git add foo
git commit -m "Initial commit"
Затем, когда вы клонируете его, просто используя git clone <uri>/repo.git
, у вас будет каталог с именем repo
, содержащий каталог .git
, и каталог с именем repo
, содержащий файл foo. По моему мнению, это слой косвенности, который может быть громоздким (я знаю, я сделал это ... однажды).
Подмодули - это запись в основном репо, представляющая собой просто каталог, содержащий другое git-репо при определенной проверке. Когда вы запускаете и обновляете субмодуль в первый раз, он в основном просто создает каталог, зарезервированный для субмодуля основным репо, а затем извлекает все это git-репо и извлекает его в этот каталог. Поскольку теперь вы должны понимать, что git-репо - это, как правило, каталог .git и извлечение его вместе с ним, должно быть очевидно, почему в этом каталоге также не будет другого каталога упаковки. Вы в основном назвали каталог, в который должен быть вложен подмодуль при использовании команды git submodule add <repo> [<target_dir>]
.