我现在已经使用了很多git但是远离了子模块,因为我没有充分的理由使用它们。但是,最近我开始了一个明显需要使用git这个功能的项目。
但是,每次克隆整个项目时,子模块都会以没有名称的分支结束。以下是我执行的命令:
git clone <url to project>
git submodule update --init <submodule>
cd <submodule>; git branch
并打印出来:
* (no branch)
master
我需要做一个额外的
git checkout master
现在我的问题是:这是标准行为吗?如果没有,你能帮助我理解我做错了吗?
由于
答案 0 :(得分:5)
与其他一些SCM不同,Git中的提交本身并不属于任何特定的分支。分支头像提交的书签。当你签出一个分支(即文件.git/HEAD
包含对分支的引用),并且你进行提交时,Git将该书签向前移动以指向新的提交。
但此跟踪行为不适用于此处。您可能已经知道,子模块固定到特定的提交;它不跟踪分支头。更新子模块时,Git仅检出该特定提交。这意味着.git/HEAD
包含提交哈希,而不是分支引用。
可能有一个或多个分支头指向此提交,但这有点无关紧要。仅当HEAD
包含分支引用而不是提交哈希时,git branch
才会显示您在分支上。