Re: [PATCH] Documentation: update git-pull.txt for clone's new default behavior
--- Junio C Hamano <junkio@cox.net> wrote:
Show 34 quoted lines
> Junio C Hamano <junkio@cox.net> writes:
>
> > Luben Tuikov <ltuikov@yahoo.com> writes:
> >
> >> --- Junio C Hamano <junkio@cox.net> wrote:
> >>>
> >>> Because [remote] is NOT about mapping. It asks the fetch
> >>> mechanism to fetch from that remote, so the primary thing you
> >>> should look at is .url, not RHS of colon on .fetch lines. Use
> >>> of tracking branches is strictly optional.
> >>
> >> [remote "origin"]
> >> url = http://blah/bleah.git
> >> fetch = +refs/heads/*:refs/remotes/origin/*
> >>
> >> This basically says: "Get it" from such and such url, where
> >> on the repo at that url, i.e. the remote side, you will
> >> find stuff in "refs/heads/", and when you get it here, locally,
> >> put it in refs/remotes/origin/.
> >
> > [remote "origin"]
> > url = http://blah/blah.git
> > fetch = refs/heads/master
> >
> > is also fine. The point is that you do not have to use tracking
> > branches. ", and when you get it here, ..." part is optional.
>
> In other words, remote.*.fetch could be spelled as mapping to
> cause them locally stored in tracking branches, but the storing
> in tracking branches is merely a side effect of a fetch, not the
> primary one. The primary effect is to fetch the necessary
> objects and leave what was fetched in .git/FETCH_HEAD to
> communicate with later 'git pull'. The side effect is optional,
> so is spelling remote.*.fetch as a mapping.
Oh ok -- I forgot about .git/FETCH_HEAD.
Show 18 quoted lines
> >> Yeah, but by default "refs/heads/branchA" doesn't exist (see
> >> my previous email). It doesn't have to, since it specifies
> >> the "remote part", but that has already been handled by
> >> "[remote]".
> >
> > Obviously fetch needs to handle the remote part because that is
> > the only name it exists at the remote. branch.*.merge is used
> > by pull, not fetch, and fetch communicates with pull by using
> > the remote name, because use of local tracking branches is
> > optional.
>
> In other words, the remote name is the only thing that can be
> used between fetch and pull to communicate. Fetch tells pull "I
> fetched these from the remote", and pull uses that information
> to make a merge, and the merge comment says "this merges the
> branch xyz from that repository", using the 'xyz' name used at
> the remote side, not your local tracking branch, which you may
> or may not be using.