I just read this excellent article on Git and source control systems and thought I’d write down my thoughts on the matter. This may be important to me because I have the growing impression that my current marketability is possibly affected by my lack of Git use.
I have been a bit perplexed by the mania over GitHub. Wikipedia reminds us that GitHub "provides social networking-like functions such as feeds, followers, wikis (using wiki software called gollum) and a social network graph to display how developers work on their versions (forks) of a repository and which fork (and branch within that fork) is newest."
Wow. That’s more complicated to think about than a lot of my software projects. But the fact is, GitHub is currently as cool as, say, Visual Basic in 1999. Unlike VB, GitHub seems wholesome and I encourage everyone to use it. But exactly like VB, I simply do not need it. Really, I don’t.
But won’t my programming projects be a complete mess without GitHub? How will I handle concurrency? Reversions? History? It’s weird to me because those were not problems I had when GitHub recently sprang into existence (you know, in 2008). I really get the feeling sometimes that people find this incomprehensible.
When I first became serious about software development I already had 15 years of experience programming the non serious way. My strategy was to look at what tools did the absolute best people use and then to learn those tools regardless of the learning curve. People wouldn’t be using something so unintuitive as Vim or Make or Unix, I figured, if they weren’t worth it. At that time, serious people used CVS.
I learned about CVS and, because I understood it, decided to not use it. I chose RCS. And that was correct. I wasn’t working on huge projects with thousands of developers. It was just me. I couldn’t afford a laptop or even a second computer. There was no "concurrency", the "C" in CVS. I just needed a revision control system. And that worked ok. Certainly I felt that if I focused more energy on my versioning control than on my projects that something was wrong.
Eventually I did get a second computer and realized that programming on two different machines was the same exact problem as multiple developers and I switched to CVS. I’ve never loved CVS, but it does the job. Certainly it has terrible issues if you need to rename files or scramble up your directory layout mid project or preserve complex permissions, but for a clean, simple well-planned code base, it’s fine. Of course if you can plan so well, you could argue that you should just write the final version of the code on the first go. Let’s just say that it worked but left room for improvement.
In 2006 some very smart people introduced me to Mercurial and that’s what I’ve been using ever since personally. I did work for a guy who seemed to have good reasons for using Subversion for our projects. My current boss has been using CVS for 20 years and I see no reason for him to change now.
As someone who is familiar with all these systems and their evolutionary past (RCS), I do not see what the fuss is about. The syntax is pretty much the same. Update (yes, even working by myself). Check in. (Or is it commit? I just think of it as "ci". Doesn’t matter - same on all systems.) This is 99% of my interaction with source control. If you’re worrying about the idiosyncrasies of your VCS all the time, your project is uglier than mine tend to be. (UPDATE - And it’s not just me! Do have a look at XKCD #1597. )
To me Git is basically like Mercurial if you like the idea of your
tools being programmed in C (which I usually do) and started by Linus
Torvalds (thumbs up there too). Functionally, I don’t see much of a
difference. I have used Git and it seems
reasonably sensible. Just like Mercurial. I actually think the real
popularity of Git is not Git, per se. It is the masses discovering
that using source control at all is a Good Thing. Well, it is. I’m
glad everyone has now figured that out. I have been employed as a
professional programmer where I was the only one on the team who used
version control in any way (besides stumbling across files like Copy
of Copy of
complex_part4.backup.2-12c.works.made_change_tofn3.pl.BACKUP
) and
that’s not pretty.
But why did Git emerge as the only system people take seriously? Why not Mercurial? For a while they both enjoyed pretty equal stature among good programmers who took care with their code. My hypothesis is that GitHub happened. GitHub is fine but I am frustrated when my lack of participation is construed as a deficiency in some way. I doubt I will ever use GitHub for my personal projects. First, the idea of a private company being in control over my source code is profoundly disturbing to me. But another important reason is that I feel like creating software worth sharing is a thousand times harder than sharing it on the internet. Who are these people who can write great code, but not host it on their web sites? That just does not compute for me. Even if I created something so wildly popular that it gets "too much" traffic, I would consider that a blessing and monetize it using optimal hosts of my own choosing. Certainly the primary reason my boss is not going to host his code on GitHub is simply, he knows how not to.
GitHub is a fine solution for people who know their alternatives thoroughly as well as for fools who are doing what sounds cool at the moment. For the latter, their code is probably much better organized and secure (from data loss, etc) on GitHub than the complete lack of attention to the issue which was common among even professionals. But for those of us who were frustrated that GitHub didn’t exist 25 years earlier, and did something about it, don’t take our lack of GitHub participation as a lack of source code mastery.
UPDATE 2018-06-03
And Microsoft buys GitHub. Maybe some more people will start to find the idea of a private company being in control of their source code profoundly disturbing. Ahem.