Re: [PATCH] Documentation: update git-pull.txt for clone's new default behavior
- From
- Luben Tuikov <ltuikov@yahoo.com>
- Date
- Jan 2, 2007, 02:05 UTC
- Message-ID
- <405044.6078.qm@web31809.mail.mud.yahoo.com>
- In-Reply-To
- <7vd55y46ta.fsf@assigned-by-dhcp.cox.net>
--- Junio C Hamano <junkio@cox.net> wrote:
Show 28 quoted lines
> What's going on is clean-up towards v1.5.0-rc1 ;-). > > - 'git clone' does not create a file that has a line that looks > like "Pull: master:origin" anywhere anymore. > > - 'git clone' also does not create the traditional "'master' is > special and we map that to origin, others are mapped as is > under refs/heads/, and we have to drop 'origin' from the > remote side because that name we want to use to store their > 'master'" layout. > > So after a clone, you would get: > > [remote "origin"] > url = .... > fetch = refs/heads/*:refs/remotes/origin/* > [branch "master"] > remote = origin > merge = refs/heads/master > > This configuration still causes "git pull" or "git pull origin" > while on "master" to fetch and store the remote side's master as > what you can refer to as 'origin' (because it expands to > 'remotes/origin/HEAD' thanks to sha1_name.c::get_sha1_basic()), > and then merges that to your current branch, so there is no > change in the user experience in the big picture, but what is > created to achieve that effect is different from what was > described.
Ah, I see. Thanks Junio.
... And this is why I see some objections as to what I'm proposing because it extends too far the extension itself of the old behavior. (See below.)
Questions:
What is the reasonining of defining branch.<name>.merge to point to the "remote's setup"? I would much, much rather stop the leak of the remote's setup right at [remote] and contain it there, while everything in [branch] would refer to local stuff.
So the above configuration would become:
[remote "origin"]
url = ....
fetch = refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
# merge gives the place and name of the remote branch locally mapped
merge = refs/heads/origin/master
# OR, better yet
# merge gives the name only of the remote branch to be merged
# the local mapping can be found from "remote = " above
merge = masterThe reasoning is that the remote's setup should only leak into [remote] and no further. I.e. [remote] is the only one concerned with the mapping between the remote repo and the local repo.
Then, [branch] only talks about local relationships. Now since [branch] does refer to _where_ the local mapping resolves to, i.e. the right hand part of `:', then there is a redundancy in branch.<name>.merge, since branch.<name>.remote _does refer_ to [remote] where we can find where it is locally mapped.
Thus, by reducibility, branch.name.merge should only contain a name. Here is the dependency graph:
branch.name.merge <- (gives a local name)
branch.name.remote <- (gives the remote)
remote.rname.fetch <- (gives the remote:local name mapping)
remote.rname.url (gives the URL).Now as to what I'm talking about, should be able to be had with:
[remote "parent"]
url = .
fetch = :
[branch "A"]
remote = parent
merge = master
[branch "B"]
remote = parent
merge = A
[branch "C"]
remote = parent
merge = BLuben