Here is something I always tell to fledgling programmers, interns and the like: if you have made something, and it would take you more than 5 minutes to recreate it from scratch, it needs to be under version control. Why? Because you will fuck up at some point. You will overwrite that file, blow away that directory or something like that. Or you will simply make a lot of stupid changes and at some point you will want to go back to the “last working version” of your code, and then what do you do?
Me? I just roll back to the last commit and I’m good. Source control saves lives. If your code is on Github, then you will never lose it, never completely fuck it up and never break it beyond repair. If you are not using source control you are doing it absolutely wrong. And no, I don’t care if you are using Git, SVN or Mercurial. As long as we don’t have to collaborate, you can use whatever the fuck you want. As long as you are using something, you are doing it right.
And no, regular backups are not a substitute for version control. Backups are important, but only as means of disaster recovery. They come in handy when you drop your laptop into the toilet or if a UFO crashes into your house and explodes. But they tend not to include archival copies of your files. Think about it – what is better: having backups of the last 7 days in one place, or backups from yesterday in 7 places? Actually, don’t answer that.
Do I need to explain why 7 exact same backups of your latest state are better than a historical archive? Because if something happens to a backup from yesterday you just irreversibly lost a day of work because your backup scheme sucks. If you lose work because you deleted something and did not notice it between backups, then you just lost work due to your own stupidity.
Backups protect you from unforeseen disasters like alien abductions or spontaneous combustion. Version control protects you from your own dumb self, or your dumb coworkers / collaborators who like to ruin your work with their “valuable input”. Does that make sense now?
Here is my problem: teaching regular people to use version control is impossible. It just can’t be done in this universe. There is just no possible way a regular Joe can be convinced to start using Git. You know how I know? Because it is fucking near impossible to teach programmers to use it.
Don’t get me wrong – I love Git. I think it is an amazing tool and I use it every day. One of the things that Git is not, is user friendly. But that’s fine – it does not need to be an idiot poof tool because it was never intended to be used by idiots. It is a power tool for professionals and as such, it works very, very well. I definitely would not want Git to become dumber so that it could be used by regular folks – that would be counter productive.
What I would like to see is an alternative. I would like there to be a Git-like tool targeted at non-programmers. I would like it to be fully automated, hassle free and focused on revision control rather than on collaborative features. Does anything like that exist out there?
Well, yes it does… Kinda. There is no single dedicated tool that I could point everyone too, but you can get this functionality as a side effect. For example, if you are a Dropbox user you get it for free, built into their web interface:
Yes, Dropbox actually puts everything you drop into it under their own, home baked version control. Every time you modify a file, they keep the old version around in case you decide to change your mind. Their history tab also lets you restore accidentally deleted files. This is not necessarily the same thing as git, but it is better than nothing. The only problem with Dropbox is that they keep your files on their servers, and they decrypt and read them if they wanted to. But if you are not paranoid or bound by restrictive confidentiality agreements, it is actually a great service. I have been using them since 2008 and have to say they are just about the best thing I have seen on the internet.
Dropbox and Google Drive (which has very similar revision control features) are my two go-to tools when I’m trying to maneuver users into responsible computing paths. The idea is that even if they never learn to use the revision feature, as long as their files are in the Dropbox or Google Drive folder I can go in and extract archival versions for them. Since the archival snapshots are completely automated (triggered by write operations within said folders) the users can be completely oblivious, and still covered by a fairly robust revision control system.
I would set everyone up with Dropbox or Google Drive account, but frequently this is not possible. As safe as secure as these services might be, sometimes I am legally prohibited from putting data on the cloud, because it is not my data. At work, our clients frequently make us sign confidentiality agreements that among other things say “if you ever dare to put these files on any kind of cloud type service, we will send a firing squad to your office”. So sometimes I wish there existed a local version of DropBox that I could deploy just for version control and without the Cloud back end.
Mac users are lucky because they get exactly that by default. Their machines have system wide version control for all their documents since Lion:
Unfortunately (or perhaps fortunately – depending on how you look at it) Mac users never really come to me for computer help. Especially not with the “I have fucked up my work, and I need you un-fuck it for me”. I’m not sure if this has something to do with the quality of OSX as a system, or the ability of Mac users to actually not be careless and stupid with their files. Perhaps it is both. Between this feature and Time Machine Mac enthusiasts seem to be pretty much covered on all fronts. Mac users also tend to genuinely enjoy working on their machines. Some people see this as insufferable smugness, but I find this attitude incredibly healthy and positive. As smugly proud Mac user will actually go out of his way to learn useful power user tricks, just to stick it to his PC using friends. Windows user on the other hand frequently abhor all the technology. An average mac user will talk your ear of about the things his computer can do, whereas a typical Windows user will spend three hours bragging about just how computer illiterate they are.
So for better or for worse, I am stuck supporting Windows users both professionally and in my personal life. And they don’t yet have a system wide version control, and probably never will. Why? Because as evidenced by Windows 8, Microsoft has completely lost its way and decided to set their robust and profitable desktop platform on fire, and pour all the money into their rapidly sinking mobile technology. So spending time on a feature that could actually be useful for desktop users is probably prohibited over there right now.
Is there a way to get Apple like, fully automated version control on Windows via third party application? Well, yes and no. Apps that do it exist, but none of them has the robustness and polish that I would like. So far I haven’t seen anything out there that I would want to slap on my default laptop images and send out into the field with the mobile computing disaster magnets that we call the users. Probably the most promising tool I have seen out there is AutoVer. Sadly it is a little buggy, and not updated very aggressively. It’s good enough for personal home use, but not ready for production.
Have you seen good Windows services that do this sort of thing locally (without the cloud)? Does your workplace use any version control software for regular users?
What is your favorite version control? Git? Mercurial? SVN?
Let me know in the comments.