Months ago, I saw the “Evening at Adler” video that DrunkenBatman released, which consisted of Mac indie developers discussing important topics about our platform. Something that they discussed which rang strong with me was a topic known as “versioning”. Basically, when a developer works on a major project, no matter what environment or platform, it’s wise to have a way to control backups, multiple people editing the same file, etc. Something that some developers had recommended to me was called “Subversion”, and sounded cool, but the docs were daunting for me at the time, so I just put it in the back of my mind and moved on with things. I found that simply copying my project folder and renaming it with “backup” in it works just as well… at least, I thought it did. Then, my web, XCode, and other projects began to explode in size – some, even hundreds of megabytes. Over the course of a month, any one of these projects could gain dozens, even more than a hundred backups. I thought 80 gigs was an okay size for a drive, but I was wrong (and I don’t have more than 4 gigs of iTunes stuff).
Well, those developers had said something to the effect of “it’s a bad idea not to have some type of versioning system”. I decided that if I wanted to become a Serious Programmer(TM), I would need to jump on board the SVN bandwagon. SVN is short for Subversion, a system that is installed on your computer or webserver, and you upload your source code/project files/whatever and then download a “working copy”, make changes, and upload the changed working copy. SVN keeps track of the files you’ve changed, and merges those changes with any changes that your co-workers/teammates have made. For instance, if “Bob” and “Jane” both download copies of their project, and Bob uploads his changes, and Jane uploads her copy after Bob, wouldn’t Jane’s files simply overwrite Bob’s hard work? No. SVN will instead help Jane to “merge” her changes with Bob’s, and she can see what he changed. This way, it’s much easier to keep track of those little things.
Did I mention that this isn’t just limited to XCode? I’ve also recently used this system with my web projects as well. It’s a slightly different workflow for me, but it’s nice to have.
There are still some things about it that I’m trying to figure out. Be aware that it’s not for the faint of heart, since as far as I can tell, you need to use Terminal to use SVN. I’m not a big fan of console apps. Does anyone out there know of a GUI frontend for SVN built on Cocoa? I’m in desperate need of one. Something that works similar to Transmit would be sweet.
I marked this post to also be in the “User Feedback” category, because I’d like to get comments from people who have had experience with SVN and how they’ve made it easier for themselves to use. Certainly you wouldn’t open Terminal and type in all of those commands every single time you want to download/upload a project? Is there a way to interface it into other apps, even XCode? Is a graphical client available? What are your experiences?