Спрятать все в Git, включая все подмодули?

Когда в проекте есть подмодули, вам нужно развернуть/размять все отдельно. Есть ли способ сделать это, используя меньше действий?

Эта ссылка может быть полезной:

Легкий способ вытащить последний из всех подмодулей

Речь идет о команде "pull", но есть некоторые способы как итерации между всеми подмодулями.

Ответ 1

Вы можете использовать foreach для запуска определенной команды git на каждом субмодуле. Например, чтобы применить 'git stash' к каждому модулю, используйте это:

git submodule foreach 'git stash'

Аналогичным образом, следующая команда извлечет ветку master, а затем извлечет все обновления из удаленного источника для каждого подмодуля.

git submodule foreach 'git checkout master; git pull'

Узнайте больше на: http://git-scm.com/book/en/v2/Git-Tools-Submodules

Ответ 2

Предупреждение: до Git.24 (Q4 2019) использование "git submodule foreach git stash" могло потерять локальные изменения в подмодулях.

См. коммит 556895d (12 октября 2019 г.) от Якоба Джармара (jarmar).
(Merged by Junio C Hamano -- [TG42] -- in commit bb52def, 18 Oct 2019)

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

Signed-off-by: Jakob Jarmar

git stash push does not recursively stash submodules, but if submodule.recurse is set, it may recursively reset --hard them.

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

Это соответствует поведению check_changes_tracked_files,, которое игнорирует подмодули.