Fred
Fred

Reputation: 17095

Git updates submodule with an unamed branch

I've used git for quite a bit now but stayed away from submodules since I didn't had a good reason to use them. However, recently I began a project which clearly needs to use this feature of git.

However, each time I clone the entire project the submodule ends in a branch with no name. Here are the commands I execute:

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

and it prints out:

* (no branch)
  master

I need to do an additional

git checkout master

Now my question is: is this the standard behavior? If not, can you help me out understanding what I'm doing wrong?

Thanks

Upvotes: 7

Views: 984

Answers (1)

Ben James
Ben James

Reputation: 125307

Unlike some other SCMs, commits in Git do not inherently belong to any particular branch. A branch head is like a bookmark for a commit. When you have a branch checked out (i.e. the file .git/HEAD contains a reference to the branch), and you make a commit, Git moves that bookmark forward to point to the new commit.

But this tracking behaviour doesn't apply here. As you may already know, a submodule is pinned to a particular commit; it does not track a branch head. When you update a submodule, Git checks out that particular commit only. That means .git/HEAD contains the commit hash, not a branch ref.

There may be one or more branch heads pointing to this commit, but that's kind of irrelevant. Only when HEAD contains a branch ref, not a commit hash, will git branch show you are on a branch.

Upvotes: 5

Related Questions