Version Control
A few days back, I gave a presentation on Version Control to my lab. It focussed primarily on Subversion, but I think the first part is useful regardless of the controlling system.

Here’s the outline:
What is Version Control
- software that keeps track of changes to code over time
- centralized repository to be accessed by multiple developers
Why do I need Version Control
- safe way to develop
- accountability
- multiple versions
- branching, tagging and comparisons
Choices
- CVS
- Subversion
- Microsoft Visual Source Safe
- Perforce
- Git
- Bittracker
Facts about SVN
- cost (free)
- license (Apache-like)
- platforms (Linux, Windows and Mac)
- documentation (svnbook)
Facts about CVS
- cannnot rename files
- cannot move directories
- eats binary files
- limited support for unicode files
Best practices
- micro commits
- never break the repository
- add relevant messages to every commit
- don’t fix whitespace
- tag at each release
- never add compiled files (like object files)
And then the demo. I used TortoiseSVN on Windows and the command line on Linux to simulate a normal development session. I’m not an expert at these things, so some things required me to experiment during the demo. I picked up a lot of the figures from the svnbook to explain concepts like the lock-modify-unlock and copy-modify-merge models.