我将git子模块配置为跟踪特定分支:
[submodule "subproject"]
path = subproject
url = ../subproject.git
branch = v2.44
在我的构建脚本中,我希望能够查询子项目的分支,因此我使用cd subproject && git rev-parse --abbrev-ref HEAD
。我希望它能输出v2.44
,但它总是输出HEAD
。
当我进入subproject/
并检查分支时,我得到:
git branch -v
* (HEAD detached at b69ac07) b69ac07 Another commit
master 36096e7 Some commit
这是怎么回事?为什么我会被分离而不是放在v2.44
分支上?
如果我手动git checkout v2.44
,那么与我git checkout v2.43
相比,父git repo也不会检测到对子模块的任何修改,然后它确实注意到子模块已被修改。
答案 0 :(得分:2)
这很正常!
仅当通过git submodule update --rebase
或git submodule update --merge
或其他一些特殊方式更新子模块时,才使用子模块声明中的分支表示法奇怪的情况。在所有其他时间,每个子模块都有一个分离的HEAD,它是在使用该子模块的超级项目中 gitlink索引条目选择的提交时分离的。
(也就是说,在 superproject 中,某些提交 C 已签出。Commit C 说:当您使用子模块时S,它应该在提交CS上。这东西叫做 gitlink ,它从提交 C 复制到索引,然后复制到{{1} }进入子模块,并以分离的HEAD的形式签出该特定的提交。)