4

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

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

我先做了git submodule update,没有报告错误。我一次又一次地尝试git submodule initgit submodule update但它没有改变。

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

4

1 回答 1

5

根据定义,子模块在分离的 HEAD 中签出:它表示在父 repo index中记录为gitlink的特定 SHA1 。

请参阅“ 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

注意:如此处所示,任何git submodule update命令都会自动分离 HEAD,即使子模块配置为跟随分支。

作为 test add git config submodule.<name>.updatemerge,因为默认情况下,更新会签出提交(分离的 HEAD)


user859375在评论中添加:

运行命令“”时,git 子模块在 init 阶段本身被分离git submodule update --init --recursive

我了解 git 引用并检查 gitsubmodules 的特定提交。

因此,我们创建了一个脚本来运行“ git submodule foreach git checkout master”和“ git submodule foreach git pull origin master”等。

这样我们就可以在本地机器上设置 repo 时保持附加的 head 状态。是的,当我们需要更新子模块以反映远程更改时,
我们运行“ ”。git submodule update --remote --merge

于 2018-02-01T05:51:50.750 回答