I have to get this rant off my chest.
Why does git insist on making up new terminology for features that are in all DVCS, and already have commonly accepted names?
Last week during a presentation, I almost choked when someone showed off a git feature where you can temporarily shelve uncommitted changes. It’s called “git stash”. Stash?! Mercurial and bazaar at least agree that this is called, um, shelve. Since you are shelving. I don’t have a bag of heroin to stash, Linus. Just patches. To shelve. Now until the end of time I will need to remember which term to use when talking to git people or the rest of the universe.
In git, when you commit, you are actually staging. (Git doesn’t consider a commit to be truly committed until you’ve posted it to someone else’s repos itory – a charming bit of communism.) A staged commit is, to git, a cached commit. Wikipedia tells me a cache is a copy of data that’s already stored elsewhere, but nevermind, that definition doesn’t apply in the gitverse. Commit = staged; staged = cached; got it?
To switch branches in a working tree, you “checkout” in git. You also “checkout” to create a new working tree for a branch. The manpage for “git-check out” can’t even avoid sounding confused by this, and admits that the former usage really “switches branches”. Let’s see if we can think of a good term for switching branches. How about “switch”? Hey look, that’s what everyone else calls it! Must be a very odd coincidence. To branch is to “clone”; to revert is to “clean”. Not even the simplest of terms escape newspeak.
I want to end on a positive note, so I will say that compared to every other DVCS, git is fast. I frequently have no idea what it’s doing (is “deltifying” really a word?), or if it’s doing what I’d like it to do, but it’s doing it very very quickly. Maybe there’s a metaphor there.