git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git clone does not checkout active branch

From
Jeff King <peff@peff.net>
Date
Aug 3, 2011, 20:04 UTC
Message-ID
<20110803200438.GC23848@sigill.intra.peff.net>
In-Reply-To
<loom.20110803T185528-8@post.gmane.org>
On Wed, Aug 03, 2011 at 04:56:43PM +0000, Udo wrote:
Show 6 quoted lines
> I have a remote bare repository with two branches 'master' and 'testing', where
> HEAD refers to 'testing'. When cloning this repository git checks out 'master',
> if 'master' and 'testing' are on the same revision (i.e. HEAD == testing ==
> master). Only if 'testing' is one (or more) commit(s) behind or ahead, git clone
> checks out the 'testing' branch on the local side. I tried this with git 1.7.5
> on Mac OS X (10.6.8).
Yes, this is a known issue.

The git protocol just sends the list of refs and the objects they point to. So the local clone is forced to guess which ref HEAD is pointing to. E.g., with something like:

  28f599b... HEAD
  1234abc... refs/heads/master
  28f599b... refs/heads/testing
it can see that HEAD is probably "testing". But if it sees:
  28f599b... HEAD
  28f599b... refs/heads/master
  28f599b... refs/heads/testing

then it has to pick one arbitrarily. Our current heuristic is to prefer "master" over others, and otherwise pick first alphabetically. So it's at least deterministic, but as you noticed, it's not always right.

The real solution to this would be to extend the git protocol to convey symbolic ref information (and then wait for both client and server to be upgraded). Some patches have been floated in the past, but nothing came of it[1]. Maybe it's time to resurrect them.

As a workaround, you can use "git clone -b testing ..." if you know ahead of time that "testing" is what you want.

-Peff
[1] See:
    http://thread.gmane.org/gmane.comp.version-control.git/102039
and also:
    http://article.gmane.org/gmane.comp.version-control.git/113567
Previous: Udo
Message 2 of 2 in “git clone does not checkout active branch”
  1. UdoAug 3, 2011
  2. Jeff KingAug 3, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.