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
).