Спрятать все в 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,
, которое игнорирует подмодули.