Delta Engine Blog

AI, Robotics, multiplatform game development and Strict programming language

Why not to use TFS for small teams and what is the best version control system for VS?

After installing VS TFS (Visual Studio Team Foundation Server) yesterday all day and having 1 million problems with it, I finally decided to ditch it. More on that in a little bit.

First I installed TFS2010 Beta1 on my home server and totally messed up the IIS with it (my brother was very angry that his PHP sites did not work anymore). I was also unable to test it, since not even connecting or the :8080 site on the server worked. Only after uninstalling TFS and IIS completely I was able to reinstall and restore IIS. This already took 6-7 hours of work because of the retarded installers, which take forever and then tell you that you missed something in some SQL server installation, which takes forever on its own.

Okay, then I thought, well this is Beta, lets just use TFS2008. It works only in 32-bit (as reported yesterday), so I used one of the very few 32bit PCs in our office to test this. After installing SQL Server 2008 and everything else I though was required I ran the TFS 2008 setup, but I got the following error:

The System Health Check has detected a problem that will cause Setup to fail.

And then it goes on about:
  • A compatible version of SQL Server is not installed.
  • The SQL Full Text Search service is not installed.
  • The SQL Full Text Search service is stopped.
  • The SQL Full Text Search service is not configured to start automatically.

  • Well, maybe I forgot something. I quickly checked that in fact I got SQL 2008 and SQL Full Text Search is also installed and running. Well, maybe something did went wrong in the installer and maybe I have to use the SP1 for SQL2008? After being unable to add any features to my SQL installation (the installer just exited with some stupid error), I completely uninstalled SQL Server, then reinstalled everything and made sure that I have all services enabled. Then I even applied SP1 for SQL2008. All this took many many hours and is a very annoying process. Whoever builds these installers really needs a lesson in usability, especially when it comes to errors and reading stupid log files with 1mio lines of useless information.

    Okay, with SQL 2008 Server now running as it should and even updated to the latest version, I finally checked if all services are running and if I can in fact connect and use the SQL server. Everything works nicely. But TFS Setup still thinks, no no, I'm not going to let you past this stupid system health check. I was ready to give up on this, I just wanted to test TFS. It is not like that I really really wanted to use it, just wanted to make sure that I'm not missing on the greatest tool ever (after watching those cool videos on By chance I found a forum post where someone had a similar issue with the system health check and he was saying it is possible to remove elements from the hcpackage.xml file in the /AT directory (Application Tier). I copied the ISO to the hard disk and removed the following xml blocks containing:

  • A compatible version of SQL Server is not installed.
  • The SQL Full Text Search service is not installed.
  • The SQL Full Text Search service is stopped.
  • The SQL Full Text Search service is not configured to start automatically.

  • Then I was finally able to continue the installation, which installed most stuff, but had some strange SharePoint configuration issues. After a little more tweaking and fixing problems in IIS and SharePoint I finally gave up. The TFS server installation is just horrible. It might work on a fresh server if you are lucky, but just for testing out TFS it is impossible hard. The TFS version control system and project management from VS2008 worked, but I could not do much other things. TFS is probably overkill for us anyway (and way too expensive, I would really need good arguments to convince everyone else in our company), we will just be a handful guys working on a game engine. If you got 50 or 100+ people on a project and you can dedicate someone to the TFS administration. This website says you usually need 1.5-2 full time TFS admins and that I'm not far off with the amount of work required to get TFS up and running.

    Okay, so TFS is out. Back to Subversion then? I don't want to talk bad about Subversion, it is a great tool and works better than most other source controlling system and we used it with great success in our last project. But it is not a universal tool! There was a discussion a few years back started by Linus Torvalds where he stated that Subversion wasn't very fitting for kernel development, he is using Monotone (a free distributed version control system) instead now. You can read more about it here on the Subversion website. While Monotone sounds interesting I'm not really interested in it since there is no support for Visual Studio and there isn't even a Tortoise like client right now.

    I also was very used to a VS integration of VSS, TFS, Perforce and many other version control systems I used before Subversion. This is actually what I hated most about Subversion in the beginning, you constantly have to update everything yourself and then commit your work, which often fails because someone else had committed something in the meantime, etc. But after a while you get used to it and instead of working mostly in VS, you also have to do a little bit of work with TortoiseSVN in the Windows Explorer. What really annoyed the crap outta me and my colleagues was the constant errors we got in our big project. Each day someone else had a problem, sometimes Clean Up worked, sometimes we had to delete directories and re-update, sometimes even work got lost. Subversion with a huge project can eat up valuable development time if you constantly get bugged by the system.

    When I got my first SSD I immediately had a space problem because subversion was keeping 2 copies over everything (current work files and repository files in the .svn sub directories for comparing), which made Subversion on a SSD very unusable for our project, which already was 20+ GB big. This means the project eats up 40+ GB on the hard disk due the duplication and if you only have a 64 GB SSD with Windows, Tools, etc. taking up 20-30 GB, there is no space left and without deleting lots of stuff I was not even able to get a full update of our project. But this is not the only problem. I also work a lot at home, especially at nights, which require me to update the project at home too. Yes that is 20+ GB over internet, which takes forever. But things get worse with the whole way Subversion transmits those updates. I constantly have to get full files of many 100 MB just because a few bytes have changed. And I gotten all kind of crappy errors with invalid packages, network errors, aborting updates for no reason, etc. I never got a 100% complete version of our game project at home because some file is always not working (I admit we got maybe 50k files in there, but still, a good system should just work better and more reliable). Small files work just fine in Subversion, only the merging was troublesome at the end for the project. I constantly had to merge empty lines for no apparent reason and sometimes Subversion merged to files into an uncompilable mess (even worse, sometimes it compiled, but destroyed the game or introduced new bugs). Big files however take forever (95% of the size of our project was artist content, most files several 100 MB in size). I guess artists lost at least 5% of their time each day updating everything all the time and we got a fast gigabit network, it is just Subversion is slow, hard disks are slow and it makes everything takes forever. I have not read much on source control systems managing several TB of data, which is kinda what we are looking for in the next project. That has to be most likely a different system than we use for source control in VS, artists use different tools anyway (Photoshop, 3DS Max, Z-Brush, Maya, etc.).

    Again, Subversion is great. I use it now for many personal projects and it works just great if you only have a few MB of data. I don't think it is the best solution for artist content, we have to evaluate AlienBrain and 3DS Max Vault next week for the artists to see if it really makes a big difference, but it is still ok, its free and works most of the time just fine. It is certainly better than just having a big file share and let everyone else mess with everyone's files like we and probably most other teams did in the past. With 2+ TB of total artist content in our last project we still did it to an extend because that would just be insane with Subversion, no one is going to update 2+ TB of data from other artists he does not care about. Hopefully other tools are better in this regard and help artists to find their stuff much easier (AlienBrain looks pretty amazing in the videos and screenshots, but 3DS Max Vault has also some nice features like real-time 3D previews with revision history).

    I just don't think Subversion is the right choice for us programmers in the next project. We want to use VS2008 (and later VS2010 once more plugins are ported) and we want to think about version controlling the least amount possible. I personally want many rules to make sure new guys in our team do help us productively like forcing that all unit tests pass before checkin in and forcing check-in comments. Not sure how to do that with Subversion. 4 years ago I used Perforce, which was pretty fast back than and me and a friend used it over internet and it worked pretty good. Configuration is a little bit hard and I'm not so sure about many concepts in Perforce. The mean reason I distance myself from Perforce is the price, $900 per user is a little much. We also had some bad experiences using Perforce to get the latest version of the Unreal engine, which only worked on a virtual XP machine. Again, hard to administer, but performance is great and VS integration is also pretty good. There are also many other alternatives. For example I tried out Monotone yesterday, which sounds interesting, but there is no VS integration.

    When it comes to VS integration only a handful of version control systems are left:
    • VSS (Visual Source Safe, last version is from 2005): Works pretty good if you are alone, better than nothing, but not much better. Very many bad user stories of corrupt databases and the whole system is relying on a network share, which is neither secure nor very useful for Internet access. Note: There are also many MSSCCI (Microsoft Source Code Control Interface) compatible addins for many lesser known version control systems out there, but I found none that are worth mentioning here. The MSSCCI IMO is not powerful enough to provide enough options nowadays (no force commit comments, usually hard to configure repositories, etc.)

    • TFS (Team Foundation Server): The big guns from Microsoft. Extremely powerful system with lots of useful project management tools, but very much overkill for small teams (<5 or <10 people). Also very high cost and extremely hard to setup (as reported above). Still a good solution and probably the best VS integration out there since it all comes from Microsoft. I personally dislike some of the features like the Unit Testing or Bug reporting (much rather use TestDriven and OnTime for those), but even that is easily replaceable. This tool also integrates project managers, testers and developers all into the same product. Not much help for those artists in our team (more than half are artists), but TFS was not really designed for creating games anyway.

    • VisualSVN and AnkSVN: Big fan of those and I have been using VisualSVN for several years now, especially for smaller projects works good. It is just a thin layer above Subversion. Sometimes you still need to use TortoiseSVN. There is still the same amount of pain involved with updating, missing files that are not checked in automatically and cleanup issues, but overall works pretty good for free (or just $49 for VisualSVN). VisualSVN Server is also a great free tool to administer Subversion repositories on a Windows server! But again: I'm searching for something a little bit more powerful than Subversion.

    • Perforce: As mentioned above very fast (their trademark basically) and integrates nicely into VS. Have not tested it in the last years and I'm not so sure that the VS integration is still good enough, but if I remember correctly there are tons of options in Perforce and it has very powerful admin tools. But it is too expensive with $900 per user and no one in our team is a big fan of it.

    • Code Co-op: Has a nice idea of working online and offline and is especially useful in VPN and Lan scenarios, it even works by just using Email. There is no server involved, it is all P2P, pretty cool since even Wiki and Bug Database support has been added in 5.0. I'm sure all those features are great, but to me the Code Co-op VS integration is not very good. It works, but that's it, there are almost no extra options. Backup is also kinda difficult since co-op saves everything locally (similar problem as with subversion, I can run out space pretty quickly). Overall a great and cheap solution ($149-$199 per user) that also has a wiki, bug tracking system and overall co-op and its tools work pretty good. For this price I would not be able to find another solution that is so feature complete. But I like OnTime more, which already gives me a wiki and a great bug, feature and work tracking tool. I'm searching for a great version control system that just works in VS, should be very fast, is easy to backup and does not waste hard disk space.

    • I could probably evaluate a lot more, but many good version control systems have other things in mind, they do not focus on VS! For example AlienBrain has great tools for artists, but is crappy for programmers IMO (and still costs a ton of money for developers).

    • One that I almost forgot since I had some bad experience with it many years ago is SourceGear Vault. 4-5 years ago it was pretty slow to use over internet and the features in VS were not very amazing, it could just do the same as VSS, just a little better. I remembered a high cost, but now compared with the other solutions it looks pretty cheap ($299). The SQL Server integration is a big plus, which makes backups easy and gives me more confidence. After installing TFS yesterday for 12+ hours and finally giving up on that whole mess, I tried to install the new SourceGear Vault version 5.0.1, which took basically just 2 minutes on the server. That is including downloading the app, installing it, creating an admin account, creating a repository and testing it via the website and webservice.

      WOW! That is amazing. This is how an installer should work, instant results! Then I installed the client on my PC and connected to the server, which again, just works (just a simple web-service it has to connect to). Vault has many more features and a nice integration with its SourceGear Fortress Project Management and Bug system. It also integrates nicely into other bug trackers including FogBugz, OnTime, etc. OnTime also supports SourceGear Vault, which is just great, this is what I have been looking for! Subversion integration in OnTime was pretty crappy, but Vault seems to work pretty good. Other than those two OnTime only supports VSS (ugh) and Perforce. So I'm pretty limited in choices there ^^

      Well, after trying Vault a little bit and adding about 1000 project items (10-20 MB), which worked pretty quickly (probably compressed everything nicely), I only found 2 annoying issues: I want to get rid of the Get Latest Version dialog and the start-up time is kinda slow (5+ seconds over internet), everything else is superb! I already reported those in the SourceGear forum and maybe someone can help me out with those. It is only minor annoyances and not a show stopper like most other version control systems were for me this weekend.

    To end this already way too long blog post (because I originally wanted to blog about cool VS tools this weekend after evaluating TFS, which ate up most of my time, grr), lets just all (that's probably just me) agree that SourceGear Vault is the best choice for me (and our team of course, but they don't know about it yet) right now. Congratulations SourceGear Vault, you win :)

    Other useful links if you like discussions about version control systems: