Git 子模块分离头状态

Git submodule detached head state

我在 externals/subA 和 externals/subB 中向项目添加了 2 个子模块,subA 和 subB。

今天另一个团队成员提交了他的代码,当它被拉取时,在 externals/subA 和 externals/subB 中使用 git status 时,subA 和 subB 都显示分离头状态。

我先做了 git submodule update 并且没有报告错误。我又试了 git submodule initgit submodule update 但它没有改变。

我们怎样才能让子模块恢复同步?是什么导致子模块出现这种情况?这是我们开始以来第一次出现问题。谢谢。

一个子模块根据定义在分离的 HEAD 中签出:它表示一个特定的 SHA1 记录为 gitlink in the parent repo index

查看“git submodule update”以确保子模块正在跟踪分支:

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 
# or (with rebase)
git submodule update --rebase --remote

注意:与shown here一样,任何git submodule update命令都会自动分离HEAD,即使子模块被配置为跟随一个分支。

作为测试添加 git config submodule.<name>.update 合并,因为默认情况下,更新检查提交(分离的 HEAD)


user859375 adds :

The git submodule is detached in the init stage itself when running command "git submodule update --init --recursive".

I understand git refers and check-out particular commit of gitsubmodules.

So, we created a script to run "git submodule foreach git checkout master" and "git submodule foreach git pull origin master" among other things.

This way we're able to keep the attached head state when setting up repo in local machine.
And yes we run "git submodule update --remote --merge" when we need to update submodules to reflect changes in remote.