The pros and cons of Git and SVN have been discussed abundantly for many years. So what makes me ask this question anyway? Most discussions compare certain technical aspects in detail but do not ask how relevant these actually are. I like to take the discussion to a more pragmatic level.
Let's face it. Most professional developers, including myself, are not really interested in version control. Of course they are aware that it is neccessary but they want to interact with it as little as possible and focus on their actual work instead. It is something that should more or less happen in the background. And of course as an employer you don't want the precious time of your developers to be spent on non productive stuff.
When comparing SVN with Git, it is pretty safe to say that the latter is much more complex. More things can go wrong. And they will go wrong and cost money.
Two examples:
In SVN there is your local data and a central repository. That's easy to understand and there is a single source of truth. In Git, there are multiple repositories. A local one and potentially multiple remote ones. But that's not all. There is also a staging area and a stash. While all of this makes sense theoretically, it gives the developer a lot of things to keep in mind. It definitely adds complexity to her life.
In SVN, commits have simple consecutive numbers while in Git there are 40 digit hashes. I understand that in a distributed version control system, a numbering scheme like in SVN is not possible. But then, who really needs distributed version control? Is being able to work offline really such a big deal nowadays?
You could add more items to this list, for example the cryptic command line interface of Git or the possibility to modify history.
So why do companies keep switching from SVN to Git and not the other way round?
Three reasons: most open source projects are on github, the herd effect and because it's not that complicated in the day to day. The most complicated thing about Git is rebasing but even that is not rocket science, you just need to read a decent tutorial about it and keep practicing (the fact that it should be infinitely simpler is a given)
I don't think I know more than half of what git is capable of and I'm able to work with it every day.
Git's UI admittedly isn't great but you can use a few aliases to make your life better.
Totally disagree :-D Getting source control right (be it subversion or git or whatever) is very important. Even the fact that you can go back in time is something you should know how to do and can be valuable to your or your employer.
Subversion is much better these days then when Git came around but there's value in the "distributed" part of source control. Maybe Git isn't the best one (Mercurial is cool, bazaar is another contender) but as often happens with competing technologies, one gets more popular than the others, not always because of "absolute merits".
I don't think this is a fair argument, not enough to dismiss Git though. If we apply it to every technology, innovation wouldn't ever happen. We are software developers, we can't dismiss a technology because is more complicated. Though I don't like complexity for complexity's sake, "being more complex" than Subversion despite being a fundamentally different tool isn't ground for automatic dismissal. Maybe there are companies that could just as well use subversion as they use git, but most likely they are developers who already know how to manage and maintain a git based source tree, hence that's what they end up doing
"Convention over configuration", you just decide that one of the repos is the central one.
We could make the same exact argument for auto incrementing numeric IDs and UUIDs, but honestly... didn't we solve this a thousand year ago? It's not like I'm going around memorizing which commit has which ID. We use the message of the commmit and its timestamp because we're humans and not machines.
This I agree with :D It's truly bad. Mercurial's UI made more sense to me