Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Git was built with a very specific use case and aimed at an extraordinarily technical subset of users.

It dominated the world despite the UX flaws, which suggests they really aren't that bad.



I for one like how git works. Some of the command names are weird, but I know more sane names are being introduced (e.g. git restore, git switch).

Yes, you need to follow a tutorial to use it effectively. Designing for beginning users is often detrementantal to advanced users, and I object to that being called "user friendly".

I'm not very vocal about git usually because I'm not an expert I have no big complaints, and I'm not that interested in arguing about it. I think there's a lot of us that are perfectly happy with git; we just make less noise.


I'd argue the opposite - that the model was so good and so much better than anything else that it was adopted despite the UI/UX flaws. Things can be good, have a flaw and still be considered good. That doesn't mean that we pretend the flaw doesn't exist.


Mercurial is built on what is almost the same model and has what I think is a better UI/UX. Some people say that git is technically superior but you really need to be an advanced user for it to matter, or work on a really large project.

At work, we switched from SVN to Mercurial, and from Mercurial to Git. Most people were happy to switch away from SVN, but few enjoyed the change from Mercurial to Git. Personally, it took me much longer to get used to Git than with Mercurial, even though Mercurial was my first DVCS. I now have a slight preference for git, but I am happy with either (just don't bring back SVN!).

Why Git came to dominate and not Mercurial? I am not sure, but I don't think technical reasons explain everything. Its association with Linux probably helped a lot.


I was also a Mercurial fan who had to reluctantly accept the rise of Git. Git was always a bit quicker, but Mercurial was much more predictable until you really understood the ins and outs of Git.

> Why Git came to dominate and not Mercurial?

The answer is actually really simple and non-technical: Github. We take these feature rich online code hosting platforms for granted now, but Github was really the leading edge of the wave. It made it easy for people to work together on writing software so it had great takeup and started a Git snowball effect.


> Why Git came to dominate and not Mercurial?

I was an early proponent of Mercurial over git. While they are similar, a few “minor” things made a big difference:

Mercurial distinguished between branches and heads, whereas git did not. This added extra complexity.

Git embraced checksums as identifiers while Mercurial provided local revision numbers, this obscured the mental model.

Git is faster to pronounce than either “Mercurial” (which has a tricky vowel in there) or “hg”.


svn has made many improvements lately too, especially in conflict resolution.

don't make the mistake of comparing "git now" vs "svn then".


Speaking about SVN, what about Bazaar?

It has been described as distributed SVN. I really hated SVN, almost to to point of wanting to go back to CVS, so I didn't want anything that took any inspiration from it. But maybe, in reality, it is not that bad.


The funny thing about the "svn vs git" debate (if one could call it that), is that people always tend to focus on the whole "svn is centralised whereas git is not" bit as the main argument.

Yet, whenever I've worked on git with others, it's been on github (i.e. a centralised model). And I've worked in a decentralised way on svn on several occasions, simply by making my own local repositories and merging changes back to the parent repository when I'm done (which is effectively what git does too when working with remote repositories).

I feel that a lot of what ends up being 'bad' about svn really boils down to the fact that you need some good conventions to be honoured across the project in order to get things done (including using it as part of a decentralised workflow), but humans being humans take shortcuts and mess things up for everyone else. Which really means at the end of the day, the problem isn't the technology per se, but human relationships, manifesting as commit behaviours. Whereas git just imposes its highly opinionated model of doing things on you in order to ward off some of the more destructive human behaviours, which in a sense is good, but at the same time, it means that git can be too rigid, and svn effectively gets a bad rep for being potentially more flexible and scriptable. I've been in many situations where I had to get into an incredibly convoluted manual process to work around git's mental model to get it to work for me, when the equivalent in svn (for better or worse) would have been fairly straightforward.

(Disclaimer: This is just my personal experience from happily using both with no specific preference for one mental model over the other. If anything, I think I may probably prefer svn a bit more now. I'm probably completely wrong about all of it.)


It dominated the world because GitHub was better than BitBucket and had more generous free levels.

If only that wasn’t the case we’d all be using a sensible source control system now instead of one where people repeatedly say things like “if you just learn the underlying model…”


> GitHub was better than BitBucket and had more generous free levels

GitHub for many years only had free public repos, not privet, BitBuckets USP was that you could have privet repositories for free.

GitHub "won" because of the social aspect around it and the tooling for open source projects - it never had more generous free levels.


BitBucket limited the number of repos you could have while GitHub allowed you to have as many as you wanted so long as they were public. Which had the (intended?) effect of making it more useful socially.


It's not even an anecdote but, uh, I prefered hg to git until the day I tried to use it on a system with the wrong Python installed...

(I like Python! But it's a scripting language, not a systems language. Also the "deployment story" is bananas.)


I've worked with CVS, Subversion, Bazaar, Visual SourceSave, Team Foundation Version Control, Mercurial and Git.

The worst systems are the Microsoft ones, but the one with the most complex interface is definitely Git.

I would argue it won because of github. I'm using Git because of that, but still prefer Mercurial in every way.


I agree with this. Mercurial is cool, but if you need to convert your Mercurial project to Git to push to GitHub, then it's a fucking pain.


There is Sourcehut, which supports Hg.


> It dominated the world despite the UX flaws, which suggests they really aren't that bad.

No it doesn't. It suggests the other features are so damn good that it overcame the horrible UX.


I'd say that ppl got used to it and it is good enough + industry standard, so it is hard to migrate to something else

Especially if you'd have to lose github, thats the real force

If gh migrated to something else, then a lot of ppl would follow


These days when I have to use svn somewhere I use git as a client, because it works better for me.

If you prefer you can use mercurial as a git client in the same way.

Most of my git use stays local on my PC, uploading it to github or gitlab or whatever is a secondary concern for me.


It dominated the world thanks to Linus cult (their hero can do no wrong), and being required for Linux contributions.

I bet git produced by a no name Linus, in isolation not required by any major project, would have hardly been taken any major uptake.


> It dominated the world thanks to Linus cult (their hero can do no wrong), and being required for Linux contributions.

I think parent's point is that that demographic is positively tiny, and there were plenty of other serviceable offerings around at the time.

The claim stands - git won despite its UX flaws, which does suggest the alternatives, while serviceable, weren't sufficiently fit for purpose.


The alternatives weren't required for collaboration in Linux development.


Yes, but again, the number of people collaborating on Linux kernel development is truly tiny.

I think perhaps you're over-estimating the network effect for VCS's -- having multiple version control binaries on your machine is low cost, and aliases can, up to a point, give you a consistent interface to them all.

The highly sophisticated demographic of kernel developers would not have been at the pub insisting that their friends drop svn and use git (exclusively!), anymore than they would have been trying to get any other projects they worked on to adopt bitkeeper previously.

The fact that bitkeeper was required for 'collaboration in Linux development' for so long supports this position.


Bitkeep wasn't free beer and its adoption was widely controversial, until Git was born given their change of heart.


Well it was a bit more complicated than that. (I met Tridge shortly after the fracas, actually.)

There were perhaps 5k kernel contributors in 2005, would that be fair? There's perhaps 20k now, I guess.

github alone has 80+ million users.

It's possible, I suppose, that the former is predominantly the cause of the latter, but it seems hugely unlikely.

6 years ago Larry released BitKeeper under an Apache licence. I still don't anyone who's ever actually used that.


So was mercurial ... but it much more user friendly.


They are bad. Some concepts like rebase etc. I still don't understand.

In software we often go for further complexity instead of less. I think because most of us who are the lead developers are often the most intelligent. And we often enjoy these complicated abstract models and they come easy to us. However in satisfying our own intellectual vanity we often don't see how many we leave behind. Which is good for our hourly rates, but less good for creating affordable and simple software.

Anyway one of the main practical advantages git had was decentralized repos meaning you were not dependent on an external server which meant git was often much faster if working with in daily tasks compared to centralized versioning systems


I'm sorry if this sounds arrogant, but if you don't understand basic Git concepts like rebase, I don't think you're in a position to comment on the architecture of Git


Thats kinda the point :). I've read this many times, but schopenhauer in german is more readable:

https://stackoverflow.com/questions/804115/when-do-you-use-g...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: