git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git annoyances

From
Daniel Barkalow <barkalow@iabervon.org>
Date
Apr 10, 2008, 14:08 UTC
Message-ID
<alpine.LNX.1.00.0804091830590.19665@iabervon.org>
In-Reply-To
<20080409204149.GC18968@elte.hu>
On Wed, 9 Apr 2008, Ingo Molnar wrote:
Show 27 quoted lines
> 
> * Daniel Barkalow <barkalow@iabervon.org> wrote:
> 
> > > also, the first natural thing i did was to just type:
> > > 
> > >  $ git-merge ~/linux-2.6-x86.git/
> > > 
> > > which i naively assumed would sort things out for me and provide 
> > > some reasonable default behavior - but instead it just gave an 
> > > annoyingly unhelpful error message:
> > > 
> > >  /home/mingo/linux-2.6-x86.git/ - not something we can merge
> > > 
> > > there should really be a consciously established "route of failure 
> > > resolution" - directing people towards relevant sources of 
> > > information or commands when the git command-line utilities return 
> > > some error due to user incompetence. Otherwise users just guess 
> > > around and get frustrated.
> > 
> > I'm not sure we can figure out what the user actually meant in this 
> > case; there's just too much overlap in namespaces to determine 
> > reliably that you were giving it a remote repository on the local 
> > filesystem rather than anything else.
> 
> well, current git got to /home/mingo/linux-2.6-x86.git/ which is a local 
> path. (it is printing it in the error message above) So i think it was 
> rather unambiguous what i meant and Git knew about it, right?

Actually, your shell did that. I don't think git can tell that the user typed something different and the shell converted it because it's a local path.

> but even if it _was_ ambiguous, i think tools should generally default 
> to a minimal amount of hassle for new users and should try to pick 
> reasonable "action" versus any "inaction". (as long as the behavior is 
> still deterministic and reasonable even to the long-time user)

It's hard to evaluate proposals for extending cases from inaction to some action because in trying to keep it deterministic, you have to decide whether future, possibly more compelling, extensions might want to overlap the space of commands. It's more conservative to have the command suggest some things the user might have meant, even if that's sometimes a list of one, so that the user doesn't come to rely on behavior that is only deterministic within a vaguely-delineated area.

Show 24 quoted lines
> but more importantly, i think this whole problem area has to be handled 
> with a slightly different kind of mindset than other, more technical 
> aspects of Git.
> 
> Humans, and in particular males, when they see or learn new things, are 
> very emotion-driven. The first 1-2 minutes (often just the first few 
> seconds) have a very strong influence on whether that person 'likes' a 
> new topic, tool or gizmo he is checking out - or not. Males often think 
> of themselves as being objective when shopping new items - while in 
> reality more than 90% of their purchasing decisions are emotion-driven 
> and it's all set and done in the first 10 seconds of visual contact. 
> (this ration is far higher than for females)
> 
> Command-line tools like Git are at heavy natural disadvantage compared 
> to say GUI tools because the "first impression" is so minimalistic and 
> relatively unremarkable. A GUI can get people hooked by making the first 
> 10% look easy just via old-fashioned, dishonest visual deception.
> 
> so basically for 90% of the new users, we've got 2-3 shots or we lose 
> their "sympathy". Starting with an error message is bad. Being 
> uninformative about what happened is bad. Making the user wait without 
> signalling why he is waiting is bad. Etc. etc. I think this experience 
> of mine was a reasonable simulation of a first-time user reaction (by 
> virtue of me having forgotten certain Git details).

I think that it's far enough along before a user types "git merge ..." that we've got a chance to give a suggestive error message instead of just doing something, particularly if the thing we might do might be wrong and either annoying to clean up or slow. (OTOH, "git clone ..." had better work, and I think it does)

And I agree strongly with the need for the error messages in the cases where the user was closer to be clear and suggest the right thing.

> So i really think that maintaining this aspect of Git and in essence 
> Huffman-optimizing the interface and the learning curve for first-time 
> Git users is perhaps the most important thing. Especially since some 
> users like me will often re-learn Git details that they use rarely.

On the other hand, there's a conflict between having git do what the user seems to want it to do and having git's commands delineated by concepts that users need to know, such that users will be assisted in learning those concepts (and therefore have an easier time getting the results they expect from git consistantly). For example, "merge" works on information you have within the repository, and "fetch" brings information into the repository. In some cases, we could guess that the user has typed "merge" but wants to bring information into the repository, but we won't always be right, and we want the user to learn how to tell git unambiguous things.

Show 23 quoted lines
> Getting these details right is _extremely hard_, because the people who 
> are capable of fixing these details have long forgotten the first-time 
> annoyances they had! (if they had any - often developers are 
> statistically lucky and never hit any pitfalls.)
> 
> It's doubly hard because Git developers work on Git exactly because they 
> _like_ it, so one's own positive experience has to be contrasted to the 
> prospect of negative first-time experience.
> 
> It's triple hard because it might also mean changing some things that 
> have been done in Git since the start of the project. A negative 
> experience that isnt some technical problem in the strict sense - it's 
> an emotional thing that is much harder to define and much harder to 
> agree on and improve.
> 
> So i think it's really hard mentally - and i'm positively surprised by 
> the many constructive and positive reactions that my mail generated.
> 
> Improving this area is perhaps even harder than adding new functionality 
> - but i think it's a key and extremely strategic aspect of Git, because 
> it affects the very heart of the Git project: it maximizes the influx of 
> new users (who also include future Git developers btw.) and minimizes 
> outflux of existing users.

I think the market segment that most git developers would really like to get is the projects that they work on aside from git. There's a substantial itch to make git sufficiently compelling that nobody would make them use CVS/SVN/Perforce/ClearCase/etc. This has a significant usability-to-new-users component, and so there's more attention to that than in projects where use of the project doesn't require getting particular other people to use it.

	-Daniel
*This .sig left intentionally blank*
Previous: Ingo MolnarNext: Junio C Hamano
Message 52 of 86 in “git annoyances”
  1. Ingo MolnarApr 9, 2008
  2. Björn SteinbrinkApr 9, 2008
  3. Jeff KingApr 9, 2008
  4. git-remote: show all remotes with "git remote show"Jeff King, Apr 9, 2008
  5. Johannes SchindelinApr 9, 2008
  6. Junio C HamanoApr 10, 2008
  7. Ingo MolnarApr 9, 2008
  8. Ingo MolnarApr 10, 2008
  9. Avery PennarunApr 9, 2008
  10. Karl HasselströmApr 10, 2008
  11. Avery PennarunApr 10, 2008
  12. Karl HasselströmApr 11, 2008
  13. Friendly refspecs (Was: Re: git annoyances)Teemu Likonen, Apr 9, 2008
  14. Avery PennarunApr 9, 2008
  15. Jeff KingApr 9, 2008
  16. Teemu LikonenApr 9, 2008
  17. Jeff KingApr 9, 2008
  18. Jeff KingApr 10, 2008
  19. Jeff KingApr 10, 2008
  20. Junio C HamanoApr 10, 2008
  21. Jeff KingApr 10, 2008
  22. Teemu LikonenApr 13, 2008
  23. Add examples section to 'git fetch' manualTeemu Likonen, Apr 13, 2008
  24. Junio C HamanoApr 13, 2008
  25. Matt GrahamApr 13, 2008
  26. Teemu LikonenApr 13, 2008
  27. Junio C HamanoApr 14, 2008
  28. Jeff KingApr 16, 2008
  29. Jeff KingApr 16, 2008
  30. Junio C HamanoApr 16, 2008
  31. Jeff KingApr 16, 2008
  32. Daniel BarkalowApr 16, 2008
  33. Junio C HamanoApr 16, 2008
  34. Jeff KingApr 22, 2008
  35. Junio C HamanoApr 22, 2008
  36. Daniel BarkalowApr 22, 2008
  37. Jeff KingApr 22, 2008
  38. Jeff KingApr 22, 2008
  39. Junio C HamanoApr 22, 2008
  40. Jeff KingApr 22, 2008
  41. Teemu LikonenApr 23, 2008
  42. Junio C HamanoApr 23, 2008
  43. Andreas EricssonApr 23, 2008
  44. Jeff KingApr 23, 2008
  45. Jeff KingApr 23, 2008
  46. Teemu LikonenApr 23, 2008
  47. Junio C HamanoApr 9, 2008
  48. Teemu LikonenApr 10, 2008
  49. Santiago GalaApr 12, 2008
  50. Daniel BarkalowApr 9, 2008
  51. Ingo MolnarApr 9, 2008
  52. Daniel BarkalowApr 10, 2008
  53. Junio C HamanoApr 9, 2008
  54. Jon LoeligerApr 9, 2008
  55. Nicolas PitreApr 9, 2008
  56. Jeff KingApr 9, 2008
  57. André Goddard RosaApr 9, 2008
  58. Govind SalinasApr 10, 2008
  59. Jean-Christian de RivazApr 10, 2008
  60. Sverre RabbelierApr 10, 2008
  61. git-bisect annoyancesIngo Molnar, Apr 10, 2008
  62. Christian CouderApr 11, 2008
  63. Ingo MolnarApr 11, 2008
  64. Christian CouderApr 12, 2008
  65. Junio C HamanoApr 11, 2008
  66. When a remote is added but not fetched, tell the user.Gabriel, Apr 10, 2008
  67. Johannes SchindelinApr 11, 2008
  68. GabrielApr 11, 2008
  69. Default to fetching a remote after adding it.Gabriel, Apr 11, 2008
  70. Stephen SinclairApr 11, 2008
  71. Johannes SchindelinApr 12, 2008
  72. GabrielApr 12, 2008
  73. Johannes SchindelinApr 12, 2008
  74. Teemu LikonenApr 11, 2008
  75. Junio C HamanoApr 11, 2008
  76. Sverre RabbelierApr 11, 2008
  77. Junio C HamanoApr 11, 2008
  78. Sverre RabbelierApr 11, 2008
  79. Miles BaderApr 15, 2008
  80. Default to fetching a remote after adding it.Gabriel, Apr 11, 2008
  81. Wincent ColaiutaApr 11, 2008
  82. GabrielApr 11, 2008
  83. Luciano RochaApr 11, 2008
  84. Wincent ColaiutaApr 11, 2008
  85. Jeff KingApr 10, 2008
  86. Sverre RabbelierApr 10, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.