Можно ли проверять ветви главного репозитория синхронно с подмодулями?
Чего я хочу добиться, так это всякий раз, когда я использую git checkout на моем основном репозитории, например:
git checkout my-branch
Мои подмодули будут следовать за моей ветвью вместо отделенной головы.
Возможно ли это, и если да, то как?1 ответ:
Если эти репозитории подмодулей имеют свою собственную ветвь my, они могут быть объявлены следующими за этой ветвью
cd /path/to/your/parent/repo/Foo git config -f .gitmodules submodule.bar1.branch my-branch git config -f .gitmodules submodule.bar2.branch my-branch git submodule update --remote
Но это подразумевает повторение этого каждый раз, когда вы проверяете ветвь в Родительском РЕПО.
Торек указывает в комментариях, что эти подмодули могут иметь свои собственные подмодули, поэтому необходимо использовать опцию
--recursive
.Вы также можете добавить
--recursive
и/или--no-fetch
в свою командуgit submodule update --remote
.
Вместо отдельных операцийgit config -f
Вам может понадобитьсяgit submodule foreach
, опять же, возможно, с--recursive
.git submodule foreach -q --recursive 'git config -f $toplevel/.gitmodules submodule.$name.branch my_branch'
В нескольких строках для удобства чтения:
git submodule foreach -q --recursive \ 'git config -f $toplevel/.gitmodules submodule.$name.branch my_branch'
Затем вы можете проверить каждый подмодуль в этой ветви:
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git checkout $branch'
В нескольких строках для удобства чтения:
git submodule foreach -q --recursive \ 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; \ git checkout $branch'