Разница между вложенными git репозициями и подмодулями
git version - 2.6.4
Я застрял в ситуации, когда я не могу клонировать полное содержимое репо с использованием флага --recursive
.
В моем основном репозитории есть два подкаталога health-check
и hellspawn
.
Я создал hellspawn
в качестве подмодуля, и он также имеет свою запись в файле .gitmodules
.
Я не уверен, что health-check
, будь то submodule
или nested-git
.
health-check
не имеет записи в .gitmodules
, что делает меня тем, что это может быть nested-git
.
Если да, то почему я получаю сообщение git при клонировании основного репозитория с помощью
[email protected]:~/try$git clone --recursive
[email protected]:url/mainrepo.git
Cloning into 'mainrepo'...
remote: Counting objects: 28713, done.
remote: Compressing objects: 100% (613/613), done.
remote: Total 28713 (delta 363), reused 5 (delta 5), pack-reused 28090
Receiving objects: 100% (28713/28713), 788.79 MiB | 3.54 MiB/s, done.
Resolving deltas: 100% (17645/17645), done.
Checking connectivity... done.
Checking out files: 100% (40522/40522), done.
No submodule mapping found in .gitmodules for path 'health-check'
`
Как вы можете видеть последнюю строку, если health-check
является вложенным git, то почему git проверяет файл .gitmodules
?
Из-за этой ошибки я не получаю код, загруженный даже в hellspawn
, который является подмодулем.
Любая помощь
Ответы
Ответ 1
проверка работоспособности не имеет записи в .gitmodules, которые делают меня вещью, что она может быть вложенной - git.
Это вложенный репозиторий git.
если health-check
является вложенным git, то почему git проверяет файл .gitmodules
Поскольку вложенный репозиторий git записывается как gitlink (как подмодуль), что означает, что git проверяет, что специальная запись в индексе совпадает с объявленной в файле .gitmodules
(из-за опции --recursive
git clone
, запрашивая клонировать подмодули)
Так как эта специальная запись не соответствует ни одному пути ввода .gitmodules
, она не с этим предупреждением.
Из-за этой ошибки я не получаю код, загруженный даже в hellspawn, который является подмодулем
Два подхода:
-
Избавиться от этой специальной записи:
Попробуйте и git rm --cached health-check
(нет trailing '/
', как я упоминал в разделе git --recursive
не клонирует подмодуль"), затем добавьте и нажмите, и затем снова попробуйте git clone --recursive
-
Объявите подмодуль
То есть:
git config -f .gitmodules submodule.health-check.path health-check
git config -f .gitmodules submodule.health-check.url https://github.com/<auser>/health-check
(замените <auser>
фактическим пользователем, управляющим этим репо)
Снова добавьте, нажмите, а затем снова попробуйте git clone --recursive
.