From: Robert Shearman <rob@codeweavers.com>
To: Carl Worth <cworth@cworth.org>
Cc: Nicolas Pitre <nico@cam.org>, Linus Torvalds <torvalds@osdl.org>,
Theodore Tso <tytso@mit.edu>, Andreas Ericsson <ae@op5.se>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Junio C Hamano <junkio@cox.net>,
git@vger.kernel.org
Subject: Re: [PATCH 0/2] Making "git commit" to mean "git commit -a".
Date: Thu, 30 Nov 2006 21:33:44 +0000 [thread overview]
Message-ID: <456F4E38.50001@codeweavers.com> (raw)
In-Reply-To: <87hcwgu5t1.wl%cworth@cworth.org>
Carl Worth wrote:
> If the "create file; git add; edit file; git commit" confusion isn't
> blisteringly obvious to the git maintainers then I think I have to
> give up here.
>
> And this isn't just CVS-induced brain damage. It's the user being
> required to mentally juggle 3 states for the file, (the last
> "committed" state, the current "working tree" state, and this
> "something else" state). The sequence above, (which is very natural),
> exposes this "something else" state that to a new user.
>
Exactly. We had a tutorial for the project I contribute to (admittedly
the initial users were all used to how CVS worked) and while a number of
people got the concept of the index and were fairly happy with it, it
did add to the confusion of the tutorial, so now it doesn't mention the
index at all.
The tutorial introduced it as a staging area for commits, but the
trouble is that once you work like this you have to remember that
"git-diff" won't show you what will be committed, so you have to use
"git-diff-index" as well. If you get them mixed up then you end up
committing the wrong thing.
Here's a selected list of the commands introduced in the tutorial,
without mentioning the index:
git diff
git commit -a
git commit <changed-files>
git reset HEAD^
git cherry-pick
Here would be the same entries, but introducing the index too:
git-update-index
git diff
git diff-index
git commit
git commit -a
git commit <changed-files>
git reset HEAD^
git reset --soft HEAD^
git cherry-pick
git cherry-pick -n
The tutorial then goes from having ~12 common commands to learn up to ~17.
> If we imagine a new user as coming, not from cvs, but coming from
> no revision control system, then it's less confusing to add one single
> new state, (the "last committed" state), in addition to the "working
> tree" state the user is familiar with.
>
> Forcing the user to learn two instead of one is just plain harder,
> (which is completely separate from git _allowing_ this extra state
> once you learn it).
Having the index exposed for even simple operations means that the user
has to initially learn three states instead of two. The worst thing
about the index is that it is a limbo state. The committed content is in
the history and can be viewed by gitk (and other tools that the user
will be introduced to later) and the working tree is exactly what the
user sees in their editor. Having a hidden state isn't very good from an
HCI point of view.
Once you understand the concept of the index, it is very useful.
However, new users should be shielded from it if at all possible.
I'm not advocating making "git-commit" equal to "git-commit -a" as I've
been frustrated by command's semantics changing in git before. I can
understand long-time git users would automatically try to use
"git-commit" to just commit their index and get annoyed if it did
something unexpected. Therefore, I would advocate there being no default
behaviour for "git-commit" except for displaying a help message, and
making previous "git-commit" users now use "git-commit -i".
--
Rob Shearman
next prev parent reply other threads:[~2006-11-30 21:34 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-27 21:31 [PATCH/RFC] "init-db" can really be just "init" Nicolas Pitre
2006-11-27 22:05 ` Junio C Hamano
2006-11-27 22:40 ` Hyphens and hiding core commands (was: "init-db" can really be just "init") Carl Worth
2006-11-27 23:59 ` Hyphens and hiding core commands Junio C Hamano
2006-11-28 0:23 ` Carl Worth
2006-11-28 0:42 ` Junio C Hamano
2006-11-28 1:35 ` Carl Worth
2006-11-28 2:18 ` Junio C Hamano
2006-11-28 5:40 ` Theodore Tso
2006-11-28 9:15 ` Junio C Hamano
2006-11-29 7:14 ` Michael S. Tsirkin
2006-11-28 6:59 ` [PATCH 0/2] Making "git commit" to mean "git commit -a" Junio C Hamano
2006-11-28 10:26 ` Andy Whitcroft
2006-11-28 13:00 ` Josef Weidendorfer
2006-11-28 13:23 ` Jakub Narebski
2006-11-28 18:18 ` Carl Worth
2006-11-29 3:06 ` Junio C Hamano
2006-11-29 4:33 ` Nicolas Pitre
2006-11-29 7:44 ` Junio C Hamano
2006-11-29 18:08 ` Nicolas Pitre
2006-11-29 18:18 ` Jakub Narebski
2006-11-29 19:12 ` Steven Grimm
2006-11-29 19:30 ` Jakub Narebski
2006-11-29 18:53 ` Junio C Hamano
2006-11-29 19:09 ` Steven Grimm
2006-11-29 20:01 ` Johannes Schindelin
2006-11-29 20:39 ` Junio C Hamano
2006-11-29 21:50 ` xdl_merge(), was " Johannes Schindelin
2006-11-30 5:24 ` Seth Falcon
2006-11-29 23:37 ` Carl Worth
2006-11-29 23:53 ` Johannes Schindelin
2006-11-30 1:03 ` Junio C Hamano
2006-11-30 1:22 ` Junio C Hamano
2006-11-30 1:58 ` Steven Grimm
2006-11-30 2:04 ` Sam Vilain
2006-11-30 2:12 ` Junio C Hamano
2006-11-30 2:11 ` Johannes Schindelin
2006-11-30 3:10 ` Linus Torvalds
2006-11-30 10:27 ` Johannes Schindelin
2006-11-30 11:09 ` Andreas Ericsson
2006-11-30 15:58 ` Linus Torvalds
2006-11-30 16:40 ` Theodore Tso
2006-11-30 17:13 ` Linus Torvalds
2006-11-30 17:37 ` Nicolas Pitre
2006-11-30 18:38 ` Carl Worth
2006-11-30 18:47 ` Jakub Narebski
2006-11-30 19:04 ` Carl Worth
2006-12-01 8:44 ` Andreas Ericsson
2006-12-01 9:31 ` Han-Wen Nienhuys
2006-11-30 18:51 ` Carl Worth
2006-11-30 19:55 ` Linus Torvalds
2006-11-30 20:47 ` Nicolas Pitre
2006-11-30 21:03 ` Linus Torvalds
2006-11-30 21:16 ` Jakub Narebski
2006-11-30 21:37 ` Carl Worth
2006-11-30 21:41 ` Michael K. Edwards
2006-11-30 21:50 ` Carl Worth
2006-11-30 21:58 ` Jakub Narebski
2006-11-30 22:26 ` Johannes Schindelin
2006-11-30 22:07 ` Josef Weidendorfer
2006-11-30 22:25 ` Johannes Schindelin
2006-11-30 22:37 ` Nicolas Pitre
2006-11-30 22:31 ` Nicolas Pitre
2006-11-30 22:47 ` Junio C Hamano
2006-12-01 8:34 ` Andy Parkins
2006-12-01 23:33 ` Alan Chandler
2006-11-30 21:19 ` Junio C Hamano
2006-11-30 22:21 ` Nicolas Pitre
2006-11-30 23:02 ` Junio C Hamano
2006-11-30 23:40 ` Linus Torvalds
2006-12-01 0:13 ` Carl Worth
2006-12-01 0:21 ` Linus Torvalds
2006-12-01 1:10 ` Carl Worth
2006-12-01 1:32 ` Linus Torvalds
2006-12-01 2:08 ` Carl Worth
2006-12-01 2:44 ` Linus Torvalds
2006-12-01 3:40 ` Carl Worth
2006-12-01 3:52 ` Michael K. Edwards
2006-12-01 0:24 ` Junio C Hamano
[not found] ` <Pine.LNX.4. 64.0611301520370.3513@woody.osdl.org>
2006-12-01 0:06 ` Jakub Narebski
2006-12-01 1:20 ` Nicolas Pitre
2006-12-01 8:59 ` Andreas Ericsson
2006-12-01 23:36 ` Alan Chandler
[not found] ` <7vac28h898.fsf@assigned-by-dhcp.cox.net>
2006-11-30 22:46 ` Nicolas Pitre
2006-11-30 22:55 ` Johannes Schindelin
2006-11-30 21:33 ` Robert Shearman [this message]
2006-11-30 21:41 ` Jakub Narebski
2006-12-01 18:27 ` Shawn Pearce
2006-12-02 7:48 ` Marco Costalba
2006-11-30 18:09 ` Carl Worth
2006-11-30 18:33 ` Linus Torvalds
2006-11-30 0:52 ` Daniel Barkalow
2006-11-30 12:23 ` Salikh Zakirov
2006-11-30 13:16 ` Jakub Narebski
2006-11-30 15:15 ` Seth Falcon
2006-11-30 15:50 ` Nguyen Thai Ngoc Duy
2006-11-30 16:03 ` Seth Falcon
2006-11-30 16:05 ` Jakub Narebski
2006-11-30 17:13 ` Andy Whitcroft
2006-11-28 7:00 ` [PATCH 1/2] git-commit: prepare to make '-a' behaviour the default Junio C Hamano
2006-11-28 7:00 ` [PATCH 2/2] git-commit: make '-a' " Junio C Hamano
2006-11-28 9:09 ` Jakub Narebski
2006-11-27 23:36 ` [PATCH/RFC] "init-db" can really be just "init" Johannes Schindelin
2006-11-28 10:45 ` Han-Wen Nienhuys
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=456F4E38.50001@codeweavers.com \
--to=rob@codeweavers.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=ae@op5.se \
--cc=cworth@cworth.org \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=nico@cam.org \
--cc=torvalds@osdl.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).