Git обновляет субмодули рекурсивно

Мой проект struture

ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)

Как я могу рекурсивно обновлять субмодули? Я уже попробовал некоторые команды git (в корне ProjectA)

git submodule foreach git pull origin master

или же

git submodule foreach --recursive git pull origin master

но не могу вытащить файлы Twig.

Ответ 1

git submodule update --recursive

Возможно, вы также захотите использовать опцию --init, которая будет инициализировать любые неинициализированные подмодули:

git submodule update --init --recursive

Примечание: в некоторых старых версиях Git, если вы используете --init, уже инициализированные подмодули могут не обновляться. В этом случае вам также следует запустить команду без --init.

Ответ 2

Я использую:

git submodule update --init --recursive
git submodule foreach --recursive git fetch
git submodule foreach git merge origin master

Ответ 3

Как может случиться так, что ветвь ваших подмодулей по умолчанию не master (что случается очень часто в моем случае), вот как я могу автоматизировать полные обновления подмодулей Git:

git submodule init
git submodule update
git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

Ответ 4

В недавнем Git (я использую v2.15.1), следующее будет рекурсивно объединять изменения подмодулей вверх по течению:

git submodule update --recursive --remote --merge

Вы можете добавить --init для инициализации любых неинициализированных подмодулей и использовать --rebase если вы хотите выполнить перебазирование вместо слияния.

Вам необходимо зафиксировать изменения впоследствии:

git add . && git commit -m 'Update submodules to latest revisions'