Git was made by and made for kernel hackers to support the Linux kernel. It has an expectation that the user understands how their computer works and wants a tool catered to that knowledge. The average web developer writing Ruby or Node in Atom on their Macbook Pro isn't in the target audienece. For someone in git's target audienece, it's a great tool with far better UX than any other VCS - because it gets out of your way and gives you powerful tools for mucking with the VCS to suit your needs precisely. THIS is what makes for a good UX. A tool that's easy to learn is great, but if it can't be mastered and bent to the user's will then I'd rather take one that's hard to learn but accomodating of the master.
It does not matter who it was designed for, git is the de-facto VCS that almost everyone uses today. And people are having trouble using it because there is no better alternative: it is fast and powerful and used by many companies.
But it's UX is terrible: I use git for 10 years and I have to Google every time I need to make a branch tracking a remote one. git reset does different things based on what type of object you pass.
This has nothing to do with knowing how internals work, it is a question of consistency and providing a small non-overlapping set of tools to do my job.
It _does_ matter who it's designed for. If someone outside the target audience uses it, then it's not the tools fault for not accomodating them. My point is that the UX is great for those it's meant to be great for.
>I use git for 10 years and I have to Google every time I need to make a branch tracking a remote one.
git branch --set-upstream-to=upstream/master master
Didn't have to look this up. Seems pretty straightforward. Or just git push -u upstream master.
>git reset does different things based on what type of object you pass.
So? I don't see how this is a bad UX. Would you prefer 10 different commands? I wouldn't.