Обновления в Git подмодулей рекурсивно

мой проект struture

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

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

git submodule foreach git pull origin master

или

git submodule foreach --recursive git pull origin master

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

4 ответов


git submodule update --recursive

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

git submodule update --init --recursive

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


способ, которым я использую:

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

как это может случиться, что ветвь по умолчанию ваших подмодулей не 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'

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

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

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

вам нужно зафиксировать изменения после этого:

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