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

Re: Unable to checkout a branch after cloning

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Aug 11, 2009, 13:55 UTC
Message-ID
<4A817840.9000405@drmicha.warpmail.net>
In-Reply-To
<4A81613F.2080309@bubblegen.co.uk>
Matthew Lear venit, vidit, dixit 11.08.2009 14:17:
Show 116 quoted lines
> Hi Michael - thanks for your reply.
> Michael J Gruber wrote:
>> Matthew Lear venit, vidit, dixit 11.08.2009 12:10:
>>> Hi all,
>>>
>>> Apologies for perhaps a silly question, but I'd very much appreciate a
>>> little bit of assistance.
>>>
>>> I've set up a git repository on a machine accessible from the internet
>>> with the intention to share code with another developer. We clone the
>>> repository, commit changes then push back as you'd expect. The server
>>> runs gitweb for repository browsing. Clients are running git v1.6.0.6.
>>>
>>> When I created the initial repository I also created two additional
>>> branches - 'upstream' and 'custom'. The former is to act as a 'vendor
>>> branch' and the latter contains code specific to the custom platform
>>> that we're working on. The master branch contains merges from the
>>> upstream branch and also changes that we've made. The custom branch
>>> contains merges from master with custom platform specific changes.
>>>
>>> I've committed changes and on both upstream and custom branches as work
>>> progressed, merged them where appropriate, added tags etc and pushed
>>> everything to the remote repository. No problem. I can view the
>>> branches, tags etc in gitweb and everything looks fine.
>>>
>>> However, I can clone a new repository just fine but I'm unable to
>>> checkout the upstream or custom branches. After cloning, only the master
>>> branch is available, ie:
>>>
>>>> git checkout upstream
>>> error: pathspec 'upstream' did not match any file(s) known to git.
>>>
>>>> git branch -a
>>> * master
>>>   origin/HEAD
>>>   origin/master
>>>
>>> .git/config:
>>>
>>> [core]
>>>         repositoryformatversion = 0
>>>         filemode = true
>>>         bare = false
>>>         logallrefupdates = true
>>> [remote "origin"]
>>>         url = https://mysite/git/project.git
>>>         fetch = +refs/heads/*:refs/remotes/origin/*
>>> [branch "master"]
>>>         remote = origin
>>>         merge = refs/heads/master
>>>
>>> But the initial local repository where I work (ie created the branches,
>>> committed changes, tag, push etc) seems to be fine, ie
>>>
>>>> git checkout upstream
>>> Switched to branch "upstream"
>>>
>>>> git branch -a
>>>   custom
>>> * master
>>>   upstream
>>>
>>> .git/config:
>>>
>>> [core]
>>>         repositoryformatversion = 0
>>>         filemode = true
>>>         bare = false
>>>         logallrefupdates = true
>>> [remote "origin"]
>>>         url = https://mysite/git/project.git
>>>         fetch = +refs/heads/*:refs/remotes/origin/*
>>>
>>>
>>> Developers need to be able to clone the repository and then switch to
>>> the appropriate branch in order to work. However it seems that after a
>>> clone, only the master branch is available.
>>>
>>> Why is this?
>>>
>>> Any help would be much appreciated indeed.
>>
>> If I understand you correctly you have 3 repos: the "initial" one on
>> which everything is as expected, the "server" one and the "new clone"
>> which is missing branches.
> 
> Yes, that's correct.
> 
>> Now: How's the server one doing, i.e. what does "git ls-remote
>> https://mysite/git/project.git" say? I suspect that one either does not
>> have the branches (you haven't told us how you pushed) or in the wrong
>> place (remotes/).
> 
>> git ls-remote https://mysite/git/project.git
> 065f5f13d5f8e786729db1623cc53767c963e959        HEAD
> 065f5f13d5f8e786729db1623cc53767c963e959        refs/heads/master
> 
> Hmm. So it seems that the branches are not actually on the server
> repository. So how come I can see them with gitweb..?
> 
> I've been pushing from the 'initial' repository with git push --all and
> git push --tags.
> 
> However, when I try a git push from the initial repository I get the
> following:
> 
>> git push --all
> Fetching remote heads...
>   refs/
>   refs/heads/
>   refs/tags/
> 'refs/heads/custom': up-to-date
> 'refs/heads/master': up-to-date
> 'refs/heads/upstream': up-to-date
> 
> -- Matt

Does the situation improve if, on the server, you run git update-server-info? Do you have a post-update hook there?

Michael
Previous: Matthew LearNext: Matthew Lear
Message 4 of 7 in “Unable to checkout a branch after cloning”
  1. Matthew LearAug 11, 2009
  2. Michael J GruberAug 11, 2009
  3. Matthew LearAug 11, 2009
  4. Michael J GruberAug 11, 2009
  5. Matthew LearAug 11, 2009
  6. Michael J GruberAug 11, 2009
  7. Matthew LearAug 11, 2009

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.