Hacker News new | ask | show | jobs
by Ygg2 896 days ago
I think Git is a fine anti-benchmark.

#1 it does fine on

#2 fails because it uses jargon that's internal Git state, staging, index, etc.

#3 mostly does ok but doesn't provide useful undos for stuff like shallow copying

#4 `git checkout` exists. It fails this.

#5 doesn't do good error prevention

#6 https://imgs.xkcd.com/comics/git_2x.png exists for a reason.

#7 Git is great at this.

#8 No. It's CLI is huge and byzantine.

#9 Git has gotten better at this, but it's not good at it.

#10 There is a lot of help, docs and tutorial on the web, and with Git.

So in my book Git is like 3-5, that's a failure.

If you want a great CLI tool, Cargo is a stellar example. Git is a failure.

1 comments

> #1 it does fine on

By default, I'd say no. But with a few config settings and one or to aliases it is excellent.

> #2 fails because it uses jargon that's internal Git state, staging, index, etc.

Yes, it uses it's on jargon. But before Git there were no generally known terms for those concepts. And Git's concept do exist in the real world, previous vc systems simply tried to abstract them away and failed miserably at that.

> #3 mostly does ok but doesn't provide useful undos for stuff like shallow copying

The reflog is a very comprehensive undo mechanism, but it is hard to discover and certainly not as easy to use an undo button. Considering the target demographics of Git, I'd say it is acceptable.

> #4

This has and still is Git's weakest point.

> #8 No. It's CLI is huge and byzantine.

The default porcelain (Git's CLI) is inconsistent and very large, yes. But the underlying model is very elegant. To an expert user, this should matter more than consistent wording in the CLI and documentation. Although, I would still like to have that consistent wording. And because of the qualities of the underlying model it is possible to improve on the porcelain. Which has been happening for quite some time.

> By default, I'd say no.

What I mean is that `git status` is showing you generally what's staged, what mode it's in and so on.

> Yes, it uses it's on [sic] jargon. But before Git there were no generally known terms for those concepts.

Mercurial exists, and it's much lighter on the jargon and concepts needed to know. I'm fine if they are optional learnable stuff, like merge vs rebase. But without knowing index and staging, you're essentially confused why some commands work and some don't.

> The reflog is a very comprehensive undo mechanism

True, and I didn't say anything about it, but setting up some stuff as undoable (commits, rebase, merge) and some stuff as non-undoable (making repo shallow) is honestly indefensible.

> The default porcelain (Git's CLI) is inconsistent and very large, yes. But the underlying model is very elegant.

The Usability as I understand it is about the Interface (where Human and System meet). Whether it's CLI, GUI or physical.