Or rather the quandry of finding one. When it comes to version (revision) control systems, developers working in an agile environment are in a somewhat confusing situation. Which system should we use?

Microsoft’s offering is SourceSafe, and is the one most of us are probably using (probably because it comes with Visual Studio so is considered “free” and part of the package). However, not much has happened with SourceSafe since the current version was released almost 5 years ago. Why didn’t MS release SourceSafe .NET with Visual Studio .NET? Will there ever be a new version of SourceSafe? With the coming of Whidbey, things might change but that’s still a year off.

There are several reasons to look for something better than SourceSafe: It is slow. It is even slower across a VPN. It does not handle multiple users editing the same file very well. It has problems with opening and closing ss.ini, especially over a slow network. There is no SourceSafe service to restart when you need it to release ss.ini. You have to reboot the server, which is kind of nasty when you are running SourceSafe on a multi-purpose server machine. But worst of all: it corrupts the repository every now and then, and Microsft’s best practices implore us to run a corruption analyzer every week! Nice.

So what are the alternatives: The most apparent one has to be CVS, which works great over the Internet, but is a bit lacking if you want the same kind of Visual Studio integration as SourceSafe. There are a couple of SCCAPI implementations for CVS, but I haven’t found one that works very well. Igloo looks to be the most promising. There is a modern replacement for CVS as well, but naturally this one is even less compatible with VS.NET.

So what about the commercial alternatives? There is Borland‘s StarTeam and Rational/IBM‘s ClearCase, neither of which seem to support an agile environment and with ClearCase, it’s apparently a beast to understand. Then there is Merant‘s PVCS, which we’re currently using as our corporate repository but because of it’s pessimisstic locking scheme, any refactoring just can’t be done effectively. There is also a new kid on the block, SourceGear‘s Vault, appealing because it runs on .NET, less appealing because it tries to look and feel like SourceSafe.

So, in short, I’m quite undecided when it comes to which version control system to use. What I want is something that plays well with VS.NET, works efficiently across slow networks, is built on a database, is transactional and is easy to backup and restore, and support an agile development environment. If it supports multiple checkouts of the same file as well, that would be a nice bonus.

Does anybody have any good recommendations?

PS I’ve added a new commenting system to this site so you can leave feedback on each post. Enjoy!