我想要实现的是每当我在主存储库中使用git checkout时,例如:
git checkout my-branch
我的子模块将遵循my-branch而不是分离头。
是否有可能,如果可以,怎么样?
答案 0 :(得分:3)
如果这些子模块库有自己的my-branch,它们可以是declared to follow that branch
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
但这涉及到每次检查父仓库中的分支时重复这个。
torek指出in the comments这些子模块可能有自己的子模块,因此需要--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'