I am about to start a project (.NET) and need to decide between TFS and SVN.

I am more used to SVN(with tortoise client), CVS and VSS. Does TFS have all features available in SVN

Have any of you switched from SVN to TFS and found it worthwhile?
Also it looks like we may need Visual Studio if we need to work with TFS.

[Edit]
Money is not a consideration since we already have the licenses for TFS in place. And I am more interested in the Source Control features of TFS vs SVN, of course other features list is also welcome.


Solution 1:

"One can not compare between TFS and SVN"

SVN: is Source Code Versioning System
TFS: is full fledged Software Development Management system which contains, Version control, Release management, Requirements tracking, Document publishing and other things.

Both have nice to use IDE integration add-ins(e.g. AnkhSVN, Collabnet's add-in) available for VS2005, so that is not the point to consider.

Criteria to consider for choice:
- If you have a no or small budget project choose SVN
- If you are only looking for version control system choose SVN, if you are looking for complete development management choose TFS
- If you have patience to juggle with different integration tools (CruiseControl.Net, NUnit, NCover, FIT) to achieve proper development environment choose SVN, or if you are looking for out of the box implementation of all these for you then choose TFS

Solution 2:

Having used TFS 18 months back I found it buggy, slow, annoying, very limited search criteria and it had the feel of a product rushed out by a team of un-interested, under paid, over worked techs being forced to use Sharepoint and other MS technologies because that's what marketing wanted. Seriously it was a dog, I would have rather used SourceSafe!

SVN on the other hand is bit techie, IDE integration is a pain, and it can occasionally get confused, but the user base is massive and most issue can get resolved with a quick SO quesition.

Have you considered Vault? Works well, and isn't too pricey.

Solution 3:

I would only recommend TFS if you were using the 2013 version and using the Git based repository. I've encountered too many issues with the previous versions to consider them stable.

  • It's impossible to send multiple files to your diff tool at once. This is ridiculously useful when you want to review your changes before a merge and isn't available.
  • Inconsistent availability of functionality. Some functionality is available from only within the IDE while other pieces are only available from Windows Explorer, while still others are only available from the command line.
  • Adding files to version control is not available from the IDE and only available from Windows Explorer integration.
  • Accessing shelf sets is only available from within the IDE and not available through Windows Explorer integration.
  • Lack of a single unified installer. It's not enough just to install TFS, you also have to install team tools and power tools to get basic functionality.
  • Shelf set functionality does not merge. What could have been a cool way of doing private branches, essentially guarantees your code will go out of date and stop working.
  • You have to manually unlock text files before you edit them if you need to use an editor other than Visual Studio.
  • Sometimes Visual Studio forgets to unlock files that it itself is managing and throws an error.
  • The check in and shelving UIs base available files for commit on what has already been added to TFS and not what is actually present within the file system. This makes it extremely easy to miss files. (This is actually a problem with the way Visual Studio handles project files, but that in itself is another rant).
  • It is unnecessarily difficult to use non Microsoft tools for editing your source due to the previously mentioned issues.
  • TFS configuration is committed with your source. This means that if you change your TFS server the configuration for all your history is now incorrect. There is a default configuration you can use which overrides this behavior but it is not obvious.
  • No support for ignore filters at anything but the base level.
  • Inability to handle paths of greater than 249 characters.
  • Files that have been unlocked, but not edited show show up as changed, even though they haven't been. Differentiating between changed and unlocked would make it a lot easier for diffs, or better yet doing away with the entire broken unlocking system entirely.
  • Windows Explorer icon overlays don't clearly show whether a file has been edited. All file in TFS have a green corner while modified files add a pencil to the bottom of the icon. Switching to red corner for modified would be a lot easier to see or using the tortoise system of icons.
  • Older versions of Visual Studio have problems integrating within newer versions of TFS. This means we now have an IDE version dependency in source control.
  • Includes the user solution files by default when they aren't needed. Of course I'll admit this one might be a matter of preference.
  • Bad caching makes it possible that differences between your local copy and the server aren't accurately reflected. It's extremely frustrating to Get Latest and find that you don't actually have latest.

Solution 4:

It's been 1.5 years now that I'm using SVN for various projects. Setups I've used so far:

  • AnkhSVN client for Visual Studio. It integrates nicely as Source Control provider since version 2.
  • Servers either CollabNet Subversion on windows or Apache 2.2 with SSL + SVN through DAV on linux.

Haven't had any problems with any of these setups and I definetly recommend using SVN as it's free and easy to start using. Also many project management / bug tracking packages integrate with SVN (like trac for instance).

Solution 5:

I'd pick SVN. I've worked with SVN from a developer standpoint before and I currently work with TFS, and let me tell you that TFS is painful. While TFS is feature full and is more than just version control, its version control is sloppy at best. Merging is horrendous and many of us now turn to manual merging or merge tools because we can't rely on TFS. Files go missing, aren't downloaded to the local system sometimes, and there are just oddities in its behavior that make you want to bang your head against a desk.

That being said, if you want TFS in all its glory, are willing to work with its pain points, it is a great tool to setup automated builds, and releases.