Разница между вложенными 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.