From 7a1b1b9a712046062c668cd4e41d06b0c7a08e54 Mon Sep 17 00:00:00 2001
From: Johannes Schindelin
+In a not so serious Skype conversation, the issue of Git's usability came
+up. Once again. It is a sad thing that still, the user interface design of
+Git has nothing in common with the straight-forward, beautiful and simple
+design of the data structures beneath.
+
+It is still quite common for me to suggest using Subversion to other people
+because it is easier to use.
+
+So the idea was to have a new "porcelain" for Git, which would try much,
+much harder to be intuitive than all the other porcelains which try to fix
+the user interface warts of the Git command line interface.
+
+In other words, the idea is that there is no way you can fix the command-line
+interface, for a number of reasons, not the least of which is the inertia of
+a precious few power-users, which according to Apple's Human Interface Guidelines is not a good thing:
+"If you try to design for the 20 percent of your target audience who are power users, your design may not be usable by the other 80 percent of users.". Just as an example, what does splitting a mailbox into individual mails have to do with Version Control? Exactly.
+
+Guiding principle would be the 80 percent solution, or analogously:
+
+
+
+
+So many different ways to describe the same thing ☺ +
+But enough of the philosophical talk. Let's look at some possible interface design. First things first, the name. Users' Git Helper: +
+
+ + | ||
+
|
+The first thing you usually want to do1: get the project from somewhere: +
+
+ + | ||
+
|
+The next thing is probably that you want to look at what you got. +
+
+ + | ||
+
|
+It would default at showing the current commit, with the branch name and then +the abbreviated commit name in parentheses. +
+In general, no command would show the usage when called without options. That +is what +
+
+ + | ||
+
|
+is for. And this command would not call 'man' to do the job. It would do the +job. +
+
+ + | ||
+
|
+would have no options, as it tries to discover what is there, and lets the user +choose between options, most sensible ones first. +
+To share your work with others, +
+
+ + | ||
+
|
+would do that. The default remote would be the one from which you branched off. +
+Oh, and of course, there must be an undo: +
+
+ + | ||
+
|
+The 'undo' command must be intelligent about what makes sense and what not. +For example, once published, the commit should not be undoable, except on +another branch. And undoing a "publish" should not be possible, except if +the respective remote is marked as "personal", and the user should be told +how to set this conveniently. +
+Inside a repository, "ugh get" would try to pull the tracked branch if it +fast-forwards (but it would not say the word "fast-forward"; I had to explain +the meaning of that term one hundred billion times; one hundred billion times +too many, if you ask me), but fetch in any case and error out with the message +that there are local commits in addition to remote ones, so a merge is +necessary: +
+
+ + | ||
+
|
+Since people are familiar with other commands, "ugh
+No rebase. +
+What is a "rebase"? What would you have answered in 2004? Me, too, I would have +said "dunno, tell me!". +
+So it is all about branches. +
+
+ + | ||
+
|
+
+ + | ||
+
|
+shows the branches. +
+
+ + | ||
+
|
+If you want to know what "rebase" means, this is how it would be spelt out: +
+
+ + | ||
+
|
+Or something else, if you can come up with a more sensible name. +
+Now, how to handle "backward compatibility"? +
+No backwards compatibility. Not needed. Old farts like us can always use +
+
+ + | ||
+
|
+or even +
+
+ + | ||
+
|
+By the way, even the usability of the string "ugh" is thought through: if you +use just one hand to type it very quickly, you end up with the correct finger +in the end. +
+
+1: In the olden days, there were no
+repositories to get from somewhere, so it is obvious why the initial user
+interface design did not make that easy. Now, you might think that a "git clone"
+is not too bad, but why all these differences between "clone", "fetch", "pull"?
+Exactly, because the technical details -- the very same users could not care
+less about -- are different.]]>
+
+
-It is a shame, but most of my Git time budget is taken by msysGit these
-days.
-
-But at least msysGit is moving again; I'll probably write a Herald about
-it.]]>