Ease of Use and Learning Curve
TFS: For developers with a background in using Visual SourceSafe and Microsoft development tools, TFS is much more familiar.
Subversion: This requires more of a learning curve for developers familiar with Microsoft environments. Instead of the more familiar check-in/check-out paradigm, Subversion uses the edit/merge/commit concept.
TFS: By far the best integration into the Visual Studio IDE, and the best choice for programming in .NET languages. Not the best choice if you’re not developing in Visual Studio.
Subversion: Fairly good integration into Visual Studio, especially with additional third-party tools and plug-ins, but not as good as TFS. This is probably the better choice if you’re not programming in a .NET language, though, especially if you’re not using Visual Studio.
Scope and Productivity
TFS: In addition to source control, TFS also has features that help with project management, especially Agile development, test driven development (TDD), managing test scripts, and defect tracking. TFS is not marketed as a pure source control product, it is an application lifecycle management product.
Subversion: Subversion is only a source control tool, and doesn’t include any project management, testing, or defect tracking functionality.
TFS: TFS is integrated with Active Directory, and users are Active Directory users. Has a nice GUI interface for management. TFS also has better support for implementing overall corporate or project check-in policies, and better support for measuring metrics.
Subversion: Subversion can be made to work with Active Directory, but it can be tricky to set up.
Features Unique to Each System:
TFS (not available on Subversion):
- Shelving – Shelving is a way of saving all of the changes from your local development workstation to the TFS server without actually checking in. At a later time you, or anyone else, can “un-shelve” them to a workstation. This can be useful in a variety of situations:
- Allowing others to review your code on their own machine
- Switching tasks, for example to fix a defect, before you’re done with the code you have checked out.
- Saving your progress onto a server, which is backed up.
- Work Item Integration – associating a check-in to a work item, such as a defect or task. That code can then be tracked along with that work item.
- Merge History Tracking – stores history of all merges and allows you to query it. This is great for collaborative team environments.
Subversion (not available on TFS):
- Anonymous Access – Anyone can grab a read-only copy of the code to look at it. This is a bigger advantage for open source development environments than it is for the typical corporate IT environment.
- Patch Submission – Subversion can compare two completely different builds of the code and generate a patch to update one version to the other. While TFS can do something like this, it is much easier to do in Subversion.
- Offline Support – Subversion allows for offline work, when the user is not connected to the network or is not on-site. Again, this isn’t a big deal for most corporate IT environments but can be important for open source development.
TFS: TFS requires IIS as a web server.
Subversion: Subversion is designed to work with Apache, not IIS. It can be made to work with IIS, but most of those solutions still require Apache to be installed and proxies to be created between the two.
TFS: Windows Server 2003 or 2008, IIS, Active Directory, SQL Server.
Subversion: Apache, MySQL
- Visual Studio 2010 Ultimate (7 licenses) – retail is $6900/license, but the price varies greatly on volume of licenses and contracts or agreements previously existing with Microsoft. It also depends if you have an MSDN Subscription or not (or if you buy one along with Visual Studio). Other editions of Visual Studio 2010 will have more limited functionality with TFS, but will also cost less.
- Team Foundation Server 2010 - $500
- TFS Client Access License - $500 for first 5 developers, plus $500/developer after that.
Subversion: Free (open source)
All in all, I think both systems are quite capable. Currently we use Visual SourceSafe 2005, so pretty much anything would be an improvement. However, TFS is a better choice for us overall because:
- We’re exclusively in a .NET development environment.
- We’re working at a large government agency, so the cost isn’t a huge obstacle.
- The client likes the support that comes with TFS.
- The client already has contracts in place with Microsoft, thus lowering their initial cost of adoption for TFS.
For open source projects, or small projects either at home or at start-ups, I think Subversion would be an excellent alternative.