Sometimes a good abstraction should leak. I hated Subversion and Perforce because both seemed like mystery boxes; I could use them but I never felt like I understood them. With git I've never had that feeling, if anything it's the opposite. Git is easier to understand than it is to use; the data model is simple enough to figure out in a few minutes, but learning the nuances of the various commands and flags takes a lot longer.
Leaky abstraction is not git's problem. Git's problem is shit like "checkout -b". Why does git-checkout have a flag to do what git-branch is for? Convenience of course, but this kind of shortcut makes git harder to learn initially.
For the rest, I would agree. Git is at its core technically "simple". But the CLI UX is quite, let's call it, involved.
I think there are two primary reasons for that: Git is a very interactive tool. That just doesn't go well with a UI which is fundamentally a line printer.
OTOH Git is very powerful. Most GUIs (or TUIs) can't "handle" this well, imho.
Git is "feature overkill". On the command line this doesn't matter much as you never see all features and options at once—besides of course that nobody can remember all those switches. ;-)
But when creating GUIs, which are better in the interactivity dimension, this becomes a real hurdle. Basically you have only the options to hide things and dumb-down your tool or end up with a overloaded and therefore quite complex GUI. Really hard to strike a balance.
The best I've seen so far regarding Git GUIs was Sublime Merge. It also hides much things at first sight but manages to not lock away Git's power by doing so. A lot of features are contextual. Also you have an "intelligent" command palette at your disposal. This matches nicely with the interactivity of Git! Also the GUI is strongly inspired by the look & feel of Git's command line output.
Sublime Merge feels for those reasons in large parts like if the command line tool would be "projected" into a GUI (which is convenient as the CLI output is already quite optimized to see everything relevant quickly), but given the GUI one does not need to remember the awkward command line flags.
Git on the command line should be more like that I guess. At least a kind of build-in REPL would be good as Git is interactive not "batchy".
I know there is a "git-repl", but it's not really what I imagine. It's not really context sensitive or interactive.
"Magit" looks good from far away, or at least heading in the right direction, but it only runs under EMACS.
If there would be something like Sublime Merge for the command line (and maybe even available OOTB) this could solve quite some of Git's usability problems I think.
I agree, git made more sense to me after 6 months than svn did in the 5 years prior. The whole conflation of directories, branches and tags made svn an irredeemable monstrosity.
I’m really happy with source control at Google (perforce on a huge monorepo?). My experience with GIT has always been trying to find dummy guides on how to do simple things.