I've been meaning to write about the subject of Source Code Management for a while now. The reason for this is that I'm very surprised about the amount of software developers I personally know who don't use any type of Source Code Management tool at all. The main reason of this is because these people don't even know such a tool exists. The very few who do know about these tools just know how it works, but never use it themselves. It's shocking, to say the least.

When I got this VPS, I immediately installed Subversion for my own personal projects, even though I'm the only one working on said projects. This is where those very few people I mentioned above think wrongly about these tools. Their basic response was "If you're the only one working on the code, why do need to share it?" Very big misconception, to say the least.

The reason I originally started learning about Source Code Management tools (first started with CVS, then move to Subversion, where I have stayed ever since) because there was an additional programmer in my company who was beginning to modify the software where only I had previously worked on before. So yes, I used SCM tools to 'share' code and make sure our changed didn't conflict with each other. But then I realized that I was only using probably less than 5% of its true power.

When I did a major screw-up and pushed some bad code into the repository and then into production by mistake (it was actually incomplete code I had mistakenly committed to the repository), I was grateful that I could roll back almost immediately. Then when I needed to have a separate copy of the code, I learned the wonders of branches and tags.

After these experiences, I wondered how I ever did any serious programming work without any Source Code Management. Right now, whenever I start a new project, I immediately create the basic folder structure for the SCM before doing anything else. I think it's crazy to go forward with a new project without any SCM in place, which makes the fact that a lot of programmers aren't using any SCM just insane.

For those of you not using any SCM right now, shame on you! Allow me to redirect you to a couple of interesting articles for my preferred SCM tool of choice, Subversion. Please note, there are a lot of different SCM options out there, both commercial and open-source. I would recommend doing some research first on these different tools before deciding to go with one.

Subversion Book - Version Control With Subversion - Excellent resource not only for finding out how Subversion works, but how SCM tools work in general.
Software Branching And Parallel Universes - Great blog post from Coding Horror that explains how branching works visually, along with some reasons when not to use branching.