Git子模块跟踪远程分支

Nam*_*mbi 16 git git-remote git-submodules git-branch

我正在尝试使用git子模块将10多个存储库聚合到一个结构中以便于开发.

它应该克隆模块并签出分支.而是以分离头模式检出模块.

git clone git@github.com:org/global-repository.git
git submodule update —init
cd config-framework
git status

$git status
#HEAD detached at b932ab5
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

gitmodules文件似乎没问题

$cat .gitmodules 
[submodule "config-framework"]
        path = config-framework
        url = git@github.com:org/config-framework.git
        branch = MY_BRANCH
Run Code Online (Sandbox Code Playgroud)

我们希望默认情况下检出MY_BRANCH分支,而不是分离头.我们如何实现这一目标?

Von*_*onC 20

子模块始终分离的HEAD模式检出.

这是因为子模块将检出存储在仓库索引中的特殊条目中的 SHA1 .

另外,如果您希望子模块遵循您在其中注册的分支.gitmodules,则需要:

git submodule update --init --remote
Run Code Online (Sandbox Code Playgroud)

--remote将是一个git fetch,加上新的结帐HEAD.
唉,即使结账也是提交,而不是分支(因为你在子模块中默认没有本地分支),所以...回到分离HEAD模式.
有关详细信息,请参阅" Git子模块:指定分支/标记 ".

您可以尝试(未测试)a:

git submodule foreach 'git checkout -b $(git config -f /path/to/parent/repo/.gitmodules --get submodule.$path.branch)'
Run Code Online (Sandbox Code Playgroud)

我利用这个事实git submodule foreach可以访问' $path',相对于超级项目的子模块目录的名称.


试图指定一个子模块的分支自动检出(对于Git 2.0 提交23d25e4)....但是它被颠倒了(提交d851ffb,2014年4月2日)!
它可能很快就会到来,但目前的实施并非如此.