Git使用未命名的分支更新子模块

时间:2011-08-10 22:00:09

标签: git

我现在已经使用了很多git但是远离了子模块,因为我没有充分的理由使用它们。但是,最近我开始了一个明显需要使用git这个功能的项目。

但是,每次克隆整个项目时,子模块都会以没有名称的分支结束。以下是我执行的命令:

git clone <url to project>
git submodule update --init <submodule>
cd <submodule>; git branch

并打印出来:

* (no branch)
  master

我需要做一个额外的

git checkout master

现在我的问题是:这是标准行为吗?如果没有,你能帮助我理解我做错了吗?

由于

1 个答案:

答案 0 :(得分:5)

与其他一些SCM不同,Git中的提交本身并不属于任何特定的分支。分支头像提交的书签。当你签出一个分支(即文件.git/HEAD包含对分支的引用),并且你进行提交时,Git将该书签向前移动以指向新的提交。

但此跟踪行为不适用于此处。您可能已经知道,子模块固定到特定的提交;它不跟踪分支头。更新子模块时,Git仅检出该特定提交。这意味着.git/HEAD包含提交哈希,而不是分支引用。

可能有一个或多个分支头指向此提交,但这有点无关紧要。仅当HEAD包含分支引用而不是提交哈希时,git branch才会显示您在分支上。