Subject: Re: How can I access remote branches in a cloned repository on my local machine?

From: Jan Hudec <[email-masked]>
Date: Sat, 20 Oct 2007 16:09:27 +0200

On Sat, Oct 20, 2007 at 06:15:21 -0700, Erich Ocean wrote:
> Our developer group has a shared git repository at 
> [email-masked]:dev.
>
> Each developer has established their own local repository by running:
>
> 	git clone [email-masked]:dev
> 	git config remote.origin.push master:refs/remotes/<username>/master

The paths on server are refs/remotes/<userame>/master.

It's more common to publish (push to public or shared repository) to
refs/heads. The refs/remotes namespace is normally only used when fetching.
There's nothing in git saying you can't do it your way, but there are things
that make the common way more convenient.

> Each developer then does a `git pull` to update their master branch, merges 
> their changes from their local topic branches, and then does `git push` to 
> make the results available at [email-masked]:dev.
>
> As the integrator, I have then been ssh'ing into the [email-masked] 
> machine, cd'ing to "dev" and doing:
>
> 	git merge <username>/master

Yes, because locally refs/remotes is searched when looking for unqualified
ref. But if you checked that out, git would complain it's not a branch and
created a detached head.

> to incorporate their changes after running `git diff` to see what the 
> changes are.
>
> My own development repository is set up identically to the other 
> developers.
>
> What I would like to do now is clone the [email-masked]:dev 
> repository on my local machine a second time, checkout a <username>/master 
> branch in that repository, and then use BBEdit's graphical diff to visually 
> see the changes between my own repository and what another developer has 
> pushed to the shared repository. I'll then merge them into my own developer 
> repository and push that to the shared repository for the rest of the 
> developers to pull from, so no longer will I merge by ssh'ing into the 
> machine with the shared repository.
>
> The problem is, when I clone [email-masked]:dev, the various 
> <username>/master's aren't there. I have tried a bunch of different ways, 
> but they all give me errors. For example:

By default clone only compies refs from refs/heads to refs/remotes/origin and
from refs/tags to refs/tags.

You have two options here:
 - Move the branches on server to refs/heads. Then the various
   <username>/master will be visible locally as origin/<username>/master
   (qualified names refs/remotes/origin/<username>/master -- you can of
   course call the remote differently if you want).
 - Add +refs/remotes/*:refs/remotes/origin/* to remote.origin.fetch config
   key in your local repository (I am not sure it will work properly with
   multiple source patterns with the same destination pattern, though).

-- 
						 Jan 'Bulb' Hudec <[email-masked]>