Once upon a time, I did not use a source code repository at all. Unless I made a backup copy, when I changed a line of code, there was no way for me to know what it had changed from. Collaboration meant sharing files and manually figuring out how to merge our changes together. It was a mess.
Then I discovered CVS (Concurrent Versioning System). It kept track of every change, and made it much easier. I had no desire whatsoever to go back to the old way. Still, CVS wasn’t perfect. There were some things it did poorly, or did not do at all.
Along came SVN (Subversion). Subversion was written with the goal of replacing CVS by addressing CVS’ deficiencies, while remaining as easy to use as CVS. I loved it, and promoted it among all of my colleagues (some were quicker to migrate from CVS than others). Again, I had no desire whatsoever to go back to the old way. While not perfect, my complaints about SVN were few, infrequent, and very mild.
Along came Git. Lots of people said it was great. I didn’t see anything it did better than SVN (nothing I needed to do, anyway). I used it for a couple of projects. It was really, really complicated. Ordinary day-to-day use was about twice as complicated as SVN, to do the exact same thing. More complicated tasks, such as maintaining a vendor branch (one of the tasks I perform periodically), were four times as complicated in Git.
What is the appeal of Git? Why is there such a bandwagon of people promoting it? Supposedly Git handles merges better than SVN does, but I haven’t seen it. Supposedly Git’s better because it’s “distributed“. Frankly, I think that makes it worse.
Left to my own devices, I would like to go back to Subversion, but anyone who writes code for a living does not do so in a vacuum. If the team uses Git, you use Git. Life goes on.