Otherwise, it looks very very cool.
Otherwise, it looks very very cool.
If you ignore the staging area, you become much more tempted to make several unrelated changes in one commit, rather than untangling them.
The git UI has some warts, but the staging area isn't one of them. It's an extremely useful feature, and a true improvement over traditional SCM interfaces.
It's nice to see people wanting to improve git's interface, but please, don't just dumb it down....
git add -p doesn't help tease them apart, because its hunks are based on diffs, and the granularity usually does not coincide with actual changes (nor syntax or semantics of the languages). Which is really expecting a bit too much! Diff's implementation of LCS algorithm is incredibly fast and works amazingly well for changes in different places.
So what I do is edit the file to what I want, stage and commit, then undo and continue. This doesn't really use the staging area, and I'm hoping there's a better way to do it... if anyone can think of one?
What ungit should do is the same thing as git gui: When you go to make a commit, you can view diffs of your files and select single lines to be added to your next commit.
Edit: I've created an issue for this: https://github.com/FredrikNoren/ungit/issues/98
I really love bzr's UI in this respect, and I understand Mercurial is similar too.
I came to git already knowing what a dag was, and after having cobbled together my own patch management system to make up for deficiencies in svn, so I didn't have much difficulty intuiting almost the whole of git after very little time.
YMMV, of course.
The staging area surely adds complexity, but if you do not like it then simply don't use git.
If I have ongoing work I want to remove, I just stash it, as you said. I don't need a staging area to stash things, and it's pretty rare that I'll have unrelated work anyway.
> The staging area surely adds complexity, but if you do not like it then simply don't use git.
Ah, the old "your arm hurts? Just cut it off!" solution. Yes, I will just not use git, I will just email my team diffs.
Specifying names at commit time is really horrible - it's more error prone and harder to get a diff of exactly what you are committing.
You can also commit part of files using the staging area by doing git add -p. My workflow is often git add -p; git diff --staged; git commit
Then again, I guess the GUI could just implement the staging area itself and pass line numbers to "git commit" :)
I think hiding it under a novice/expert flag is a terribad idea, but I'm not sure what the right way to expose the staging area in this interface would be.