* Git user survey and `git pull` @ 2006-09-21 16:24 Shawn Pearce 2006-09-21 16:40 ` Petr Baudis ` (3 more replies) 0 siblings, 4 replies; 16+ messages in thread From: Shawn Pearce @ 2006-09-21 16:24 UTC (permalink / raw) To: git I just saw this comment under question 20: git-pull's behavior of merging in the first refspec to the current branch is very bad and has caused us serious repository issues in xorg. Most of the folks I've been teaching Git to recently have found `git fetch` to be a very counterintuitive command for fetching things. Especially since `git push` is what's used to send changes to the remote repository. They also find `git pull . foo` as a counterintuitive way to merge changes. Basically I'm seeing users run `git pull` when they probably should have run just `git fetch`; the pull obviously also merges the first refspec in .git/remotes/origin to the current branch and that's usually not what the user wanted, especially when the upstream remote has several branches that the user may be tracking (e.g. stable, dev, experimental). I think its probably too late to change the UI[*1*] but I think it is definately an issue for folks learning Git. Calling push push, fetch fetch and fetch+merge pull is probably a design flaw. IMHO it probably should have been something like: Current Shoulda Been --------------- ---------------- git-push git-push git-fetch git-pull git-pull . foo git-merge foo git-pull git-pull --merge git-merge git-merge-driver in other words pull does the download and doesn't automatically start a merge unless --merge was also given and git-merge is a cleaner wrapper around the Grand Unified Merge Driver that makes it easier to start a merge. [*1*] I bet a lot of scripts are currently based on the core Git Poreclain level functions. I try to avoid them myself in scripts and go right to the plumbing but not everyone does that. -- Shawn. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 16:24 Git user survey and `git pull` Shawn Pearce @ 2006-09-21 16:40 ` Petr Baudis 2006-09-21 17:38 ` Linus Torvalds 2006-09-21 17:02 ` Nicolas Pitre ` (2 subsequent siblings) 3 siblings, 1 reply; 16+ messages in thread From: Petr Baudis @ 2006-09-21 16:40 UTC (permalink / raw) To: Shawn Pearce; +Cc: git Dear diary, on Thu, Sep 21, 2006 at 06:24:01PM CEST, I got a letter where Shawn Pearce <spearce@spearce.org> said that... > in other words pull does the download and doesn't automatically > start a merge This is artifact of the BitKeeper terminology. This is the meaning in most other VCSes but in BitKeeper, pull meant "get changes and merge them", not just "get changes". So the BitKeeper legacy lives on. :-) The route I took for Cogito is to just avoid calling _any_ command "pull". It's too confusing. "update" does the same as "cvs update" or "svn update" and I didn't notice people having much problem with that. -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ #!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj $/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1 lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/) ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 16:40 ` Petr Baudis @ 2006-09-21 17:38 ` Linus Torvalds 2006-09-21 18:05 ` Nicolas Pitre 2006-09-22 4:57 ` Junio C Hamano 0 siblings, 2 replies; 16+ messages in thread From: Linus Torvalds @ 2006-09-21 17:38 UTC (permalink / raw) To: Petr Baudis; +Cc: Shawn Pearce, git On Thu, 21 Sep 2006, Petr Baudis wrote: > > This is artifact of the BitKeeper terminology. This is the meaning in > most other VCSes but in BitKeeper, pull meant "get changes and merge > them", not just "get changes". So the BitKeeper legacy lives on. :-) Indeed. "pull/push" are the operations bk has. BK doesn't have branches, and cannot do a "fetch", so there's no confusion in BK - the pulls and the pushes are not mirror-images, but since there are no other operations you'd normally use, you can pretty much ignore it. (That's not entirely true. In BK, you can do "bk receive" and "bk resolve" to "fetch" and "merge" another branch, but quite frankly, I personally found them so confusing that I never used them at all). I agree that the clarifications from Shawn are probably improvements, but I'd actually like to solve the problem a bit differently. Namely, I was hoping that the per-branch configuration would solve the confusion. Right now, a plain "git pull" means "fetch all branches and merge the first one", and the thing is, that's generally the right thing _only_ if you pull into "master". It's usually exactly the _wrong_ thing to do for any other branch. In particular, if you work with a project that has lots of branches, and you're working in another branch (that is directly tracking a remote, for example), doing a "git pull" definitely should _not_ merge the first head. It should fetch everything, and possibly merge the _matching_ head. Which it doesn't do right now. So I think the problem with "git pull" is not that it's a "fetch and merge", it's that it merges the wrong head. It always merges the first remote one (aka the remote "HEAD"), regardless of which head we happen to be at right now. So I was kind of hoping that the per-branch configuration stuff (that petered out after the .git/config file format was worked out) would solve the problem. That said, maybe Shawn's suggestion is better. And maybe the fact that we'd change the semantics mid-stream would make things even WORSE. I dunno. Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 17:38 ` Linus Torvalds @ 2006-09-21 18:05 ` Nicolas Pitre 2006-09-22 4:57 ` Junio C Hamano 1 sibling, 0 replies; 16+ messages in thread From: Nicolas Pitre @ 2006-09-21 18:05 UTC (permalink / raw) To: Linus Torvalds; +Cc: Petr Baudis, Shawn Pearce, git On Thu, 21 Sep 2006, Linus Torvalds wrote: > Right now, a plain "git pull" means "fetch all branches and merge the > first one", and the thing is, that's generally the right thing _only_ if > you pull into "master". > > It's usually exactly the _wrong_ thing to do for any other branch. In > particular, if you work with a project that has lots of branches, and > you're working in another branch (that is directly tracking a remote, for > example), doing a "git pull" definitely should _not_ merge the first head. > It should fetch everything, and possibly merge the _matching_ head. > > Which it doesn't do right now. I think you're summarizing my grip about git pull quite well. This is really counter-intuitive and I've been bitten by that behavior on many occasions. Nicolas ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 17:38 ` Linus Torvalds 2006-09-21 18:05 ` Nicolas Pitre @ 2006-09-22 4:57 ` Junio C Hamano 2006-09-22 10:34 ` Santi 1 sibling, 1 reply; 16+ messages in thread From: Junio C Hamano @ 2006-09-22 4:57 UTC (permalink / raw) To: Linus Torvalds; +Cc: git Linus Torvalds <torvalds@osdl.org> writes: > I agree that the clarifications from Shawn are probably improvements, but > I'd actually like to solve the problem a bit differently. Namely, I was > hoping that the per-branch configuration would solve the confusion. > > Right now, a plain "git pull" means "fetch all branches and merge the > first one", and the thing is, that's generally the right thing _only_ if > you pull into "master". > > It's usually exactly the _wrong_ thing to do for any other branch. In > particular, if you work with a project that has lots of branches, and > you're working in another branch (that is directly tracking a remote, for > example), doing a "git pull" definitely should _not_ merge the first head. > It should fetch everything, and possibly merge the _matching_ head. > > Which it doesn't do right now. I am actually in favor of adding config mechanism that lets you say things like: When on branch 'foo': - pull without any argument shall use .git/remotes/$that, instead of the usual .git/remotes/origin; - pull without pathspec arguments shall use the named .git/remotes/ file to learn from which URL to fetch from, which remote branches to fetch and which local branches to store them, but merge $this_and_that remote heads regardless of what .git/remotes/ file says; - you shall not use "reset" other than resetting to the HEAD; - you shall not use "rebase"; - you shall not merge from $this_and_that branches; - your commit identity shall be $whoami, not the usual core.user; I am not motivated enough to do that myself, though. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-22 4:57 ` Junio C Hamano @ 2006-09-22 10:34 ` Santi 2006-09-22 19:08 ` Junio C Hamano 0 siblings, 1 reply; 16+ messages in thread From: Santi @ 2006-09-22 10:34 UTC (permalink / raw) To: Junio C Hamano; +Cc: Linus Torvalds, git 2006/9/22, Junio C Hamano <junkio@cox.net>: > I am actually in favor of adding config mechanism that lets you > say things like: > > When on branch 'foo': > > - pull without any argument shall use .git/remotes/$that, > instead of the usual .git/remotes/origin; > > - pull without pathspec arguments shall use the named > .git/remotes/ file to learn from which URL to fetch from, > which remote branches to fetch and which local branches to > store them, but merge $this_and_that remote heads regardless > of what .git/remotes/ file says; > Something like http://marc.theaimsgroup.com/?l=git&m=115398815111209&w=2 ? Santi ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-22 10:34 ` Santi @ 2006-09-22 19:08 ` Junio C Hamano 2006-09-22 23:24 ` Santi 0 siblings, 1 reply; 16+ messages in thread From: Junio C Hamano @ 2006-09-22 19:08 UTC (permalink / raw) To: Santi; +Cc: Junio C Hamano, Linus Torvalds, git Santi <sbejar@gmail.com> writes: > Something like > http://marc.theaimsgroup.com/?l=git&m=115398815111209&w=2 > ? I do not have access to marc at the moment but I have saved a patch from you back from July in one of my freezer mbox. IIRC your message was not for inclusion but more as a firestarter for discussions, and the discussion never came to conclusion with appliable set of patches. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-22 19:08 ` Junio C Hamano @ 2006-09-22 23:24 ` Santi 0 siblings, 0 replies; 16+ messages in thread From: Santi @ 2006-09-22 23:24 UTC (permalink / raw) To: Junio C Hamano; +Cc: git 2006/9/22, Junio C Hamano <junkio@cox.net>: > Santi <sbejar@gmail.com> writes: > > > Something like > > http://marc.theaimsgroup.com/?l=git&m=115398815111209&w=2 > > ? > > I do not have access to marc at the moment but I have saved a > patch from you back from July in one of my freezer mbox. IIRC > your message was not for inclusion but more as a firestarter for > discussions, and the discussion never came to conclusion with > appliable set of patches. > Yes, it was. But I think now will be different :) In a moment I'll send two little patches for your two first points (pull w/o arg + pull with just the remote). Santi ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 16:24 Git user survey and `git pull` Shawn Pearce 2006-09-21 16:40 ` Petr Baudis @ 2006-09-21 17:02 ` Nicolas Pitre 2006-09-21 17:09 ` Shawn Pearce ` (2 more replies) 2006-09-22 21:05 ` Matthias Urlichs 2006-09-23 8:54 ` Jakub Narebski 3 siblings, 3 replies; 16+ messages in thread From: Nicolas Pitre @ 2006-09-21 17:02 UTC (permalink / raw) To: Shawn Pearce; +Cc: git On Thu, 21 Sep 2006, Shawn Pearce wrote: > I think its probably too late to change the UI[*1*] but I think > it is definately an issue for folks learning Git. Calling push > push, fetch fetch and fetch+merge pull is probably a design flaw. > IMHO it probably should have been something like: > > Current Shoulda Been > --------------- ---------------- > git-push git-push > git-fetch git-pull > git-pull . foo git-merge foo > git-pull git-pull --merge > git-merge git-merge-driver > > in other words pull does the download and doesn't automatically > start a merge unless --merge was also given and git-merge is a > cleaner wrapper around the Grand Unified Merge Driver that makes > it easier to start a merge. I must say that I second this. Although I'm rather familiar with GIT I still feel unconfortable with the current naming and behavior. Nicolas ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 17:02 ` Nicolas Pitre @ 2006-09-21 17:09 ` Shawn Pearce 2006-09-21 17:12 ` Johannes Schindelin 2006-09-21 17:17 ` Jakub Narebski 2 siblings, 0 replies; 16+ messages in thread From: Shawn Pearce @ 2006-09-21 17:09 UTC (permalink / raw) To: Nicolas Pitre; +Cc: git Nicolas Pitre <nico@cam.org> wrote: > On Thu, 21 Sep 2006, Shawn Pearce wrote: > > Current Shoulda Been > > --------------- ---------------- > > git-push git-push > > git-fetch git-pull > > git-pull . foo git-merge foo > > git-pull git-pull --merge > > git-merge git-merge-driver > > > > in other words pull does the download and doesn't automatically > > start a merge unless --merge was also given and git-merge is a > > cleaner wrapper around the Grand Unified Merge Driver that makes > > it easier to start a merge. > > I must say that I second this. Although I'm rather familiar with GIT I > still feel unconfortable with the current naming and behavior. The only way I've been able to resolve it internally is to say: ``I can pull the changes contained in branch foo into my current working branch by `git pull . foo`. I'm not merging changes, I'm pulling them.`` Uh, yea.... As a prior user of a popular VCS which was also used by some folks on LKML and which also had a 'pull=fetch+merge' command I fully understand why its pull in Git - but I don't like it. -- Shawn. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 17:02 ` Nicolas Pitre 2006-09-21 17:09 ` Shawn Pearce @ 2006-09-21 17:12 ` Johannes Schindelin 2006-09-21 17:17 ` Jakub Narebski 2 siblings, 0 replies; 16+ messages in thread From: Johannes Schindelin @ 2006-09-21 17:12 UTC (permalink / raw) To: Nicolas Pitre; +Cc: Shawn Pearce, git Hi, On Thu, 21 Sep 2006, Nicolas Pitre wrote: > On Thu, 21 Sep 2006, Shawn Pearce wrote: > > > I think its probably too late to change the UI[*1*] but I think > > it is definately an issue for folks learning Git. Calling push > > push, fetch fetch and fetch+merge pull is probably a design flaw. > > IMHO it probably should have been something like: > > > > Current Shoulda Been > > --------------- ---------------- > > git-push git-push > > git-fetch git-pull > > git-pull . foo git-merge foo > > git-pull git-pull --merge > > git-merge git-merge-driver > > > > in other words pull does the download and doesn't automatically > > start a merge unless --merge was also given and git-merge is a > > cleaner wrapper around the Grand Unified Merge Driver that makes > > it easier to start a merge. > > I must say that I second this. Although I'm rather familiar with GIT I > still feel unconfortable with the current naming and behavior. Originally, I wanted to shut up about this issue. But since there are two voices against the current naming, I want to speak for it. When I was introduced to CVS, _I_ found the _CVS_ names misleading. I thought that cvs update would throw away my changes. So let's face it, a single name cannot possibly convey the meaning to that many people, and therefore, it is _necessary_ to have a nice short introduction, after which users actually know that git-pull is a fetch + merge. Once you know it, what can possibly go wrong? ;-) Ciao, Dscho ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 17:02 ` Nicolas Pitre 2006-09-21 17:09 ` Shawn Pearce 2006-09-21 17:12 ` Johannes Schindelin @ 2006-09-21 17:17 ` Jakub Narebski 2 siblings, 0 replies; 16+ messages in thread From: Jakub Narebski @ 2006-09-21 17:17 UTC (permalink / raw) To: git Nicolas Pitre wrote: > On Thu, 21 Sep 2006, Shawn Pearce wrote: > >> I think its probably too late to change the UI[*1*] but I think >> it is definately an issue for folks learning Git. Calling push >> push, fetch fetch and fetch+merge pull is probably a design flaw. >> IMHO it probably should have been something like: >> >> Current Shoulda Been >> --------------- ---------------- >> git-push git-push >> git-fetch git-pull >> git-pull . foo git-merge foo >> git-pull git-pull --merge >> git-merge git-merge-driver >> >> in other words pull does the download and doesn't automatically >> start a merge unless --merge was also given and git-merge is a >> cleaner wrapper around the Grand Unified Merge Driver that makes >> it easier to start a merge. > > I must say that I second this. Although I'm rather familiar with GIT I > still feel unconfortable with the current naming and behavior. Using git-pull . <branch> for _merge_, and git-merge being mid-level command (one of the arguments is <msg>, instead of having git-commit like ways to provide/amend commit message) is somewhat confusing. -- Jakub Narebski Warsaw, Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 16:24 Git user survey and `git pull` Shawn Pearce 2006-09-21 16:40 ` Petr Baudis 2006-09-21 17:02 ` Nicolas Pitre @ 2006-09-22 21:05 ` Matthias Urlichs 2006-09-23 11:51 ` Alan Chandler 2006-09-23 14:12 ` Johannes Schindelin 2006-09-23 8:54 ` Jakub Narebski 3 siblings, 2 replies; 16+ messages in thread From: Matthias Urlichs @ 2006-09-22 21:05 UTC (permalink / raw) To: git For what it's worth, I'm in favor of renaming the things. IMHO, we do not need that kind of baggage. Sure, you explain it once and people hopefully remember -- except that they don't, not always anyway, and novice users can't be expected to be notice, let alone repair, that kind of damage. *I* make that stupid pull/fetch/merge mistake sometimes, and I'm not exactly new to git... On Thu, 21 Sep 2006 12:24:01 -0400, Shawn Pearce wrote: > Current Shoulda Been > --------------- ---------------- > git-push git-push > git-fetch git-pull > git-pull . foo git-merge foo > git-pull git-pull --merge > git-merge git-merge-driver > The new programs can (for the most part) recognize when they're called with "old" semantics, and spit out a warning. -- Matthias Urlichs ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-22 21:05 ` Matthias Urlichs @ 2006-09-23 11:51 ` Alan Chandler 2006-09-23 14:12 ` Johannes Schindelin 1 sibling, 0 replies; 16+ messages in thread From: Alan Chandler @ 2006-09-23 11:51 UTC (permalink / raw) To: git On Friday 22 September 2006 22:05, Matthias Urlichs wrote: > For what it's worth, I'm in favor of renaming the things. Me too. I am continually coming back to things after a couple of months and having to relearn everything from scratch. I never over the hump of even becoming an intermediate user of anything. -- Alan Chandler http://www.chandlerfamily.org.uk ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-22 21:05 ` Matthias Urlichs 2006-09-23 11:51 ` Alan Chandler @ 2006-09-23 14:12 ` Johannes Schindelin 1 sibling, 0 replies; 16+ messages in thread From: Johannes Schindelin @ 2006-09-23 14:12 UTC (permalink / raw) To: Matthias Urlichs; +Cc: git Hi, On Fri, 22 Sep 2006, Matthias Urlichs wrote: > For what it's worth, I'm in favor of renaming the things. > > On Thu, 21 Sep 2006 12:24:01 -0400, Shawn Pearce wrote: > > > Current Shoulda Been > > --------------- ---------------- > > git-push git-push > > git-fetch git-pull > > git-pull . foo git-merge foo > > git-pull git-pull --merge > > git-merge git-merge-driver > > > The new programs can (for the most part) recognize when they're called with > "old" semantics, and spit out a warning. Now, that only introduces more confusion! If there is another tool rename, better choose names which are virgins. Besides, I am still not convinced that the rename is necessary. Granted, some new users might get confused with the current naming, but what about those who are not? They would be confused by the new naming. And if you want unambiguous names, and even succeed in choosing sensible ones, you can make them hardwired aliases, and old habits don't have to die. Ciao, Dscho ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Git user survey and `git pull` 2006-09-21 16:24 Git user survey and `git pull` Shawn Pearce ` (2 preceding siblings ...) 2006-09-22 21:05 ` Matthias Urlichs @ 2006-09-23 8:54 ` Jakub Narebski 3 siblings, 0 replies; 16+ messages in thread From: Jakub Narebski @ 2006-09-23 8:54 UTC (permalink / raw) To: git Shawn Pearce wrote: > git-pull git-pull --merge And we can even have "git-pull --merge=<branch to merge to>" -- Jakub Narebski Warsaw, Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2006-09-23 14:12 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-09-21 16:24 Git user survey and `git pull` Shawn Pearce 2006-09-21 16:40 ` Petr Baudis 2006-09-21 17:38 ` Linus Torvalds 2006-09-21 18:05 ` Nicolas Pitre 2006-09-22 4:57 ` Junio C Hamano 2006-09-22 10:34 ` Santi 2006-09-22 19:08 ` Junio C Hamano 2006-09-22 23:24 ` Santi 2006-09-21 17:02 ` Nicolas Pitre 2006-09-21 17:09 ` Shawn Pearce 2006-09-21 17:12 ` Johannes Schindelin 2006-09-21 17:17 ` Jakub Narebski 2006-09-22 21:05 ` Matthias Urlichs 2006-09-23 11:51 ` Alan Chandler 2006-09-23 14:12 ` Johannes Schindelin 2006-09-23 8:54 ` Jakub Narebski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).