From: Luben Tuikov Date: Mon, 01 Jan 2007 03:29:22 GMT Subject: Re: [PATCH] Documentation: update git-pull.txt for clone's new default behavior Message-ID: <59142.7095.qm@web31801.mail.mud.yahoo.com> In-Reply-To: <7vwt47bjwa.fsf@assigned-by-dhcp.cox.net> --- Junio C Hamano wrote: > Junio C Hamano writes: > > > What we wanted to do ideally was to forbid "git pull" that does > > not have explicit refspec from the command line, without > > configuring branch.*.merge. However this broke established > > workflow of people who has remote.$origin.fetch configured to > > list the remote branch to fetch explicitly; the merged branch > > selection has always been "the first set of branches listed in > > the configuration" and these peoples had their configuration > > right without needing to have branch.*.merge at all. > > > > Unfortunately git is too flexible around this area. > > > > We probably could somehow arrante the remote branches that came > > from wildcarding not subject to the merge branch selection > > logic, but honestly I am tired of looking at that code for now. > > I am still tired of looking at the code, but I would rather > look at it now than having to still look at it next year. > > How about doing this? The difference this time around is that > if you have non-wildcard refspec listed first, which usually > is the case for people with established git workflow with > existing repositories, we use the old-and-proven rule to > merge the first set of refs. An earlier round botched this > completely by basing the logic on lack of branch.*.merge, > which broke for many people. Can we please instead revisit the "branch..remote" and "branch..merge" options? What I'd really like to see and what really would be useful to me every day is if I could individually _address_ a "branch..remote" and "branch..merge" pair of options. I.e. I'd like to say "git-pull parent" or "git-pull parents" in such and such branch, and this would pull the designated parent(s) for the current branch. But if I'm in a different branch (of the same repo) then the meaning of "parent" changes accordingly. Currently, the parent<-->child branch relationship only exists in paper: for example: git master is the parent for all my (local) branches, "git-upstream" is child of "next", "git-lt-work" is child of "git-upstream" and "git-home" is child of "git-lt-work", each one introducing its own customizations and changes. I currently do the pull/merge by hand, remembering the child/parent relationship and enforcing it manually by the strict pull/merge sequence I do. Of course we shouldn't break existing usages like for example "git-pull . tag ...". I can achieve the same thing using the "branch.*" options today, but I do "git-pull" and I'm not entrirely satisfied with that since in my head I know I'm doing a "parent->child" merge and would like to express that on the command line. So this is something of a cross between the remotes/ and "branch.*" option. For example "branch...fetch" and "branch...merge" would do the trick. Then at prompt, I say "git-pull " which will match local branch and symbolic name to whatever matches. Of course, "branch...*" would seem to be identical to remotes. We should disallow that by stipulating that a non-empty symbolic name imples non-empty branch name. "branch...*" would be identical to its current usage. The point is that the symbolic name changes its designation depending on which is the current branch, and with a name like "parent" that makes sense. Luben