git subodule init абсолютно ничего не делает

У меня есть странная проблема с "git subodule init"

Когда я добавил субмодули, используя "git subodule add url location", он просто клонировал репозиторий, и все было в порядке.

Когда я переместил все мои изменения обратно в родительский репозиторий, добавил файлы.gitmodules и т.д. И клонировал репозиторий, я попытался инициализировать все подмодули, используя "git submodule init",

И ничего не происходит :( Буквально ничего, нет выхода, нет лишних файлов, он даже не пытается что-либо сделать на самом деле.

Поэтому мне интересно, что я сделал неправильно?

.gitmodules:

bash$ cat .gitmodules
[submodule "projects/subprojectA"]
    path = projects/subprojectA
    url = ssh://[email protected]/test/projectA.git

[submodule "projects/subprojectB"]
    path = projects/subprojectB
    url = ssh://[email protected]/test/projectB.git

Ответ 1

хорошо, я понял, что я сделал не так.

Когда я добавил подмодули git, я сделал git статус, и он сказал мне, что три вещи изменились

.gitmodules
projects/subprojectA
projects/subprojectB

когда я подталкивал все свои изменения в репозиторий, я не хотел комментировать подмодули, потому что я думал, что он добавит все файлы, которые я только что клонировал, поэтому я просто сделал git, добавив.gitmodules и зафиксировал и нажал.

Но это неправильно, вам нужно сделать git commit и передать все, что он вам скажет, тогда, когда вы это сделаете, git зарегистрирует эти пути, и когда вы клонируете, он будет работать.

но если вы не совершаете эти папки, он не зарегистрирует их и не будет клонировать их при клонировании родительского репозитория.

так что это была моя ошибка, я неправильно понял, что добавление этих каталогов добавит весь код подмодулей в родительский репозиторий, я попытался обойти это и прекратил работу.

поэтому просто добавляйте свои подмодули и фиксируйте результаты, все будет хорошо работать: D

Спасибо за помощь защитников, независимо!

Ответ 2

Используйте --recursive при клонировании. Эта опция инициализирует все перечисленные подмодули:

git clone --recursive

В другом случае, если вы хотите инициализировать подмодули git, которые вы просто клонировали, вы можете использовать

git submodule update --init --recursive

Ответ 3

Следующее сработало для меня в случае субмодуля googletest:

git submodule add --force https://github.com/google/googletest.git googletest

Итак, вам нужно вручную добавить субмодуль (обратите внимание на флаг --force).