Delta Engine Blog

All about multiplatform and game development

Trying out Git and why distributed versioning is not really for game developers.

After watching the following video from Linus Torvalds about Git and testing several versioning tools this week again (see my previous post about all kinds of source versioning tools like TFS, VSS and SourceGear Vault), I decided to give Git a chance. A friend of mine is using Mercurial for his personal projects by utilizing VisualHg (Mercurial plugin for VS). Mercurial is very similar to Git (from my limited knowledge), both are distributed revision control systems, which means no central server and everyone has a peer-to-peer like repository. This this involves much more merges, branches and applying patches to many different repository versions, merging is much more important than in a centralized versioning tool.

The only reason I even watched the following presentation about Git (it does not really tell you much) is because Linus was bashing CVS, Subversion and many other versioning tools so hard. Some true points, but some people really disliked his style. I found it entertaining.

You can find more documentation and a second video with more technical details about Git on the Git Documentation website.

Well, all this Linux crap can be interesting from time to time, but as long as there is no Visual Studio integration, I'm not really ever going to use it anytime soon. However, there is a pretty successful GitExtensions project, which includes a very good integration to Windows, the Explorer and even Visual Studio 2005/2008. After installing this and trying it out for a while I kinda liked how nicely everything integrates into this tool-set. You got Putty or OpenSSH, KDiff3, all the command line support for playing around and you can even integrate all kinds of other merge tools from Subversion, Perforce or whatever you like better. Using GitExtensions is definitively easy and I can see why it would make sense in a highly distributed open source project, everyone can work on his own version and changes or fixes are around at different places. It can also be used for small teams, then everyone trusts each other and can merge all the changes whenever they want. Merging changes is pretty cool tool, there is no need to do it twice, once a programmer has merged something, it is merged for everyone else once he pulls the new version.

However, I will not be using Git for neither my personal projects nor at work. First of all I do mainly game development and while source files are important, there are many other file formats to consider and Git does not store them in any useful way. Because of the distributed model it is impossible to lock a file, which means any changes to any binary file can result in loss of work (or worse: more work since someone has to merge changes yourself by hand). I have read many discussions about this yesterday and some people are just retarded to not see the point. If you just put text files into Git, everything is fine, but once you have binary files that might change (why else would you even put them into a versioning tool), you can get into trouble. I'm not saying tools like Subversion are better, but at least they allow you to lock files, to announce to everyone in the team: "This file is mine now, please wait until I'm done changing it". With more than 3 people and with lots of un-merge-able binary files this is currently the only way this can work efficiently. Sure we could use two or three different kind of versioning tools (one for programmers, one for content, and even specialized ones for artists, which integrate into their tools, etc.), but what is the fun in that?

But that is not really the reason not to use Git for source code. Merging works pretty good for text files and since you can do a lot more merges and be much more efficient, it sounds really useful. Git even tracks if you remove code from one file and put it into another file, you can still see history of it, etc. The reason I really dislike Git and many many other versioning tools is simply: It is freaking annoying to use all the time. You may only waste 10-30 seconds for pulling, committing local changes, pushing them to somewhere else, selecting files that have changed, adding comments, doing a quick merge, etc. every time, but if you do that many times a day, a lot of time is used just for that. You don't believe me? Just watch the 5 video tutorials on the GitExtensions homepage, or check out the Git Documentation, its samples and video tutorials. It is not hard to use these tools, but it costs a lot of time constantly doing all this crap. I fully understand that this might be very necessary for huge projects like the Linux Kernel or useful and wanted for distributed open source projects, but that is not what I want to do all day and that is not what I want my employees doing.

I like if the source control system is completely hidden and ALL actions are done automatically by just working on the project!
- You open Visual Studio to start working? All files are updated automatically!
- You edit a file? The file is checked out to you automatically, others can still work on it, if it is a merge-able file, but they know that you are already sitting on it (maybe both of you are trying to do the same thing, check work tasks again). But even if both people are required to change a file, there is usually never a problem if you check-in often!
- You are done working? Just close Visual Studio and everything gets checked in automatically with a nice comment (required). Or just commit in the middle of the day as much as you want if you think your changes are important or needed right now.

Easy as that. We pretty much worked that way in the last project, except we used Subversion and we had HUGE amount of files (20+ GB just binary content). On some slower PCs it took 10+ Minutes just to get the latest files. Then we had to manually Update everything every morning just to start working. Committing happened when done working or when something important was finished. But many commits just fail in a big team because you have to update again since someone else changed something. Then there is the worst part: Merging. Sometime it works fine. "Luckily" we only had a few developers working on the same files so most changes could be merged, but from time to time there were really bad merging conflicts. Empty lines could not be merged, comments were slightly different (e.g. we had to disable automatic comment and header generation just because of constant conflicts of really unimportant stuff) and if you were really unlucky some changes were merged into a uncompilable mess. Even worse, sometimes you could compile it, but some game logic was now buggy or some config files were messed up. What I also hated about Subversion was the fact that I could never get a complete version of the repository at home, there was always some stupid checksum error, network corruption, https not working, etc. problem that prevented some 200MB file not being downloadable.

Again, it all depends on what you are working on. For example our artists had not much problems with Subversion except for the long update times, annoying cleanup and rare mess-ups that happened from time to time. But then again they never versioned their work data, they just checked in the final files to be used in the game. That alone eat up many 100 GB on the repository. I bet the Linux kernel team is happy with Git and many years ago when I was using VSS for myself I was also happy with it (not much can go wrong if you are by yourself ^^). For our next project I also don't want to have the whole repository of everything on my small SSD, e.g. subversion needs everything twice, git would even need more than that since every version is in the .git directory plus the actual working files, fine for text files, not fine for huge binary files. Only give me the stuff I really need for working, not sure how to do this for content yet, but I bet there is some crazy setting in Perforce to do it or we just write some tools ourselves that only get stuff that is required for execution (unit tests, editor, etc.).

Still had not really time to dig into any of the new tools I wrote about in the last weeks, but for now I will stay with SourceGear Vault and its painless integration to VS. It looks like our Artists disliked AlienBrain (mostly because of the fact that it does not even support the recent 3DS Max 2010 version for over 6 months now), for that reason they are currently evaluating Perforce, which is kinda hard to get used to at first, but it is fast for binary files and it integrates nicely into everything (Photoshop, 3DS Max, Maya, etc.) and we can also use it for our project management (OnTime) and hopefully integrate all that together with our build tool (whatever it might be, I'm currently liking Cruise Control). I don't think I like Perforce for us coders since the VS addin is very old school and might cause some pain. The server setup was also not easy at all, there are no admin tools on the server, you have try to use the stupid P4V program or even better the command line to fix up stuff. Currently we got a delay of 5s for all operations and we have no idea where it is coming from. Probably have to set it up again and try all kinds of settings to get it into a usable state. That is something I really liked about SourceGear Vault, installation took 2 minutes and everything was working out of the box. It might be a more simplistic tool, but that's what I'm looking for :)

Useful links:

Useful Developer Tools for Visual Studio 2008

After all that fun installing and trying out version control systems (see my last blog entry), I finally wanted to evaluate some developer tools for our next project. Since this is intended to be an overview of tools our team is probably going to use, I will also mention tools that I have been used over many years and might not sound new or special to you (especially if you have read my blog before). Some of the tools will just be evaluated and if we don't like them or don't need them, we won't use them!

If you want to know about general tools for Windows, Productivity, Online and Power Tools, check out Scott Hanselmans great post from this week about Ultimate Developer and Power Users Tool List for Windows! Most apps on this list I have tested before or use daily too, some stuff like AutoHotKey, Windows7 Gmail Notifier, BugShooting and ClipX was new to me, but I very much like those tools now :)

While I would like if all we need would just be Visual Studio, nowadays a lot of great tools are available at your fingertips. Most of them are free to use or can at least be evaluated for for a month, so there is not even an excuse not to use them, especially if they help in the overall productivity of the project.

Let's start with the mother of all developer tools: Visual Studio. Since VS2010 is not done yet and it will take a while until Beta2 comes out and then more time will pass until the final product is available sometime in 2010, we can't use it yet. Especially since there are not many addins available and this post is all about addins! This means VS 2008 all the way for now!

As reported in my last blog entry I decided to use SourceGear Vault instead of Subversion (which we used in 2008-2009) or TFS (which I tried briefly in 2005/2006). IMO it has one of the best VS versioning integration. It also integrates nicely into OnTime (and OnTime integrates nicely into Vault) and we can set it up the way we like it. Hopefully it will also work nicely together with whatever build system we are going to use.

Next on my list are unit testing tools and while ideas in TFS sound great, we are not going to use TFS for our project (see my last blog post). Instead I have fallen in love with TestDriven.NET many years ago. I do not even think about it anymore, it feels to me as being a part of VS already. The recent version is 2.23. TestDriven.NET supports integration with NUnit, xUnit, NCover, Reflector, TypeMock, dotTrace and more, some of those we also want to use.

With TestDriven.NET we can easily test methods, classes or the whole project, but in order to have tests in the first place we obviously need a Unit Testing framework to write tests. For this task we gonna use xUnit (currently v1.5), it is very similar to NUnit, which is probably the most famous and popular unit testing framework in .NET. xUnit has a little bit shorter code and I like the simplicity with it. Many Assert methods are combined and overall test code seems to be shorter, we also need fewer attributes. TestDriven also supports ad-hoc tests without any framework, which is great for functional tests.

To make sure we actually cover all lines of code with our unit tests (and functional tests where automatic unit tests are not possible, which is everything involving graphic output, especially when shaders are involved) we are going to use NCover, which integrates nicely into all the other tools and can be launched from TestDriven.NET. NCover will make sure that we visually see what code gets executed and is tested. It also has great reporting features to see the progress on days when people are just working on refactorings. Refactoring, while important, often causes confusion in the team since artists or even project managers or producers do not understand when a programmer is making everything more efficiant and easier to work with, but did not add new features. By showing some fancy reports it makes it easier to explain :)

Last year I also evaluated TestComplete, but I did not found much use for it back then. TestComplete lets you create and run tests, but not as a developer, but as a normal user instead. This could be useful to non-programmer guys in our team. We gotta test it and see if people are actually using it. It could help us developers out a lot if everyone in the team is constantly testing the application and can report back useful data if something is not working (I wonder how this can be integrated to OnTime, Vault, etc.).

I'm also a big fan of CodeRush and have used it for many many years now. I started using CodeRush in 2004, even wrote my first plugin back then called CR_Commenter, which I still use to this very day. dnrTV has recently recorded a show with the funny Mark Miller on CodeRush Xpress (the free edition of CodeRush), check it out if you don't know much about CodeRush yet.

For our agile project management we are going to use SCRUM with OnTime 9.1.3. In the past we mostly used OnTime for bugs, but also for features (but not for everything, we just had weekly meetings, but did not put the results into OnTime). I'm still not sure if we want to use work-logs and tasks too (that's just 4 systems in parallel), but we are going to test it and see what makes sense in order to get SCRUM working for our team. OnTime also works just fine inside Visual Studio, it supports Vault to link to versions and files correctly. But we will most likely also make use of the OnTime SDK to support more custom features of our tools in the future. For most documentation and especially in the concept/design phase, but also later in the project, the OnTime Wiki feature will be used a lot (which now supports comments in version 9.1). Pretty cool stuff!

On the topic of communication we also want to use some better tools. I and many others in the team would like to check out Google Wave once it is available (could be end of September 2009). Till then and when Google Wave is not ready or support as many communication features as we want, we have easy email lists to reach the whole team, but since everyone on the team is using Skype we also will just create a group there for communication. For a long time some team members have been in Skype groups and discuss both at work and even after work about interesting topics, engines and games. I just want to combine all these efforts and include everyone, especially new team members (we got a lot of those recently ^^) into all the discussions. The only downside to this could be that too much chatting is going on and Skype is also very annoying when it comes to notifying the user about chats. Maybe a less intrusive system like IRC might be the better choice. We are also planing a community forum on our website and might even integrate chat there and let other people see what we are doing (Twitter like maybe? but I don't like Twitter as you probably have guessed since I never post anything there ^^).

For performance profiling we use Ants Profiler (also since 2004). dotTrace is also a nice app, but I found it less useful for game development. dotTrace also seems to have less cool features and feels a little like an outdated app (it has been some time however since I tested it). dotTrace integrates nicely into Resharper, which makes it a better integration into VS overall, but I'm not using Resharper. dotTrace is also far inferior when it comes to displaying the profiler data, it might however be more suitable for other kinds of apps. In fact the newer versions of Ants Profiler are also very confusing to me, but the time-line alone is a pretty cool thing. The VS support and navigating though code is not the best in Ants Profiler and I complained many times on that in the forum, but it has not improved at all in the last 3-4 years. However Ants Profiler is still the best .NET performance profiler tool IMO. If you don't know much about Ants Profiler yet or just want to learn more, check out the cool demonstration videos. BTW: I recently read about the SlimTune Profiler, which supports remote profiling and real time results analysis. That could be useful for game development and might help us profile remote computers of artists working with our engine. The tool is not looking very complete however and I will check back later to see how it evolves.

I have not used NDepend in the past, but the ideas sound pretty cool. It is a tool that simplifies your code base and helps you out refactoring code, which is something we want to do constantly in this project (from day one on). NDepend is also famous for the pretty library and framework pictures it can produce to give you a nice overview of a project. Update 2009-09-19: I started trying out NDepend today and it looks pretty fun and useful already, will report later how all these tools worked out!

FxCop is a extensive tool to force programmers to apply certain programming and naming rules in the project. It has been integrated into TFS and as a standalone it has been included into the Code Analysis tools. Some members of our team (including me) have not so great memories about the very strict FxCop rules, which often got in the way and were not very useful for game development. This was especially annoying since we had a huge code base when we started using FxCop and it complained about everything. No one had time to fix all issues, which were mostly not that important stuff. In the end we disabled so many rules that the tool became almost useless and in fact we stopped using it more or less. But I want to give it another shot and try to use it in our new project, which should be much easier since we start from scratch and can apply the rules one by one as we add more features, frameworks and libraries.

Since we are still very early in the project (in fact we haven't even started with it yet), I don't know if we going to need a build system anytime soon. We still want to integrate unit testing and other tools like NCover to the build process and for that reason I'm currently checking out NAnt, CruiseControl, FinalBuilder and TeamCity. TeamCity does not seem to have any SourceGear Vault support. NAnt is powerful, but I'm not really a big fan of doing everything in command line. CruiseControl also seems not to be very easy to setup, I just installed it, but the service always crashes. Probably have to setup config stuff first. I might end up using NAnt, but I gotta evaluate it a little bit more. I like however than NCover supports CruiseControl and TeamCity right out of the box, so I will take a closer look on that when setting up NCover. Should be easy to just set it up so it automatically builds stuff and does unit tests automatically. I also might want to have some cool FTP upload functionality in case we have some ASP.NET stuff.

Another thing which might become more important in the future, but is currently not needed for our project, is database support with tools and frameworks like EntitySpaces (used it a lot in 2008), NHibernate (free OR Mapper), LINQ (part of .NET 3) and others. I will decide on that when we actually need it for our project (and that time will come ^^).

Since this post is already very long and it is late, I will continue it some other time with frameworks and libraries we want to use. Hopefully I did not forget any important tool here. I also did not mention game development specific tools and frameworks in this post. That and managed frameworks, multi-platform tools and frameworks and even dynamic languages will be a big topic on the next post.

Other interesting links:

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:

    Installing TFS 2008 .. or not!

    I just tried to install TFS (Visual Studio Team Foundation Server) 2008, but as usual I had to read tons of documentation and after installing all perquisites, I finally launched the TFS 2008 Setup, which told me the following:

    The Team Foundation Server is not supported on the 64-bit version of Microsoft Windows Server 2003.

    Well, the server is Windows 2008, not Windows 2003 and it has to be 64bit for all the memory and hard discs we got in there. It seems it will not be that easy to install TFS 2008 after all. I just wanted to evaluate it a bit, it has been more than 2 years since I used TFS (TFS 2005 back then) and I guess I still had a 32bit server in 2006, but it still was very much a pain to setup the whole thing (as you can read on my blog post from 2005: New Fancy Guide for Installing Visual Studio Team Foundation 2005 Beta2).

    I remember that using a virtual server for TFS was horribly slow and I want to test TFS with some people for a new project since we were very much unhappy about Subversion in the later part of our last project. It got way too huge, we very often had merge conflicts, IMO it is not very good for big projects with lots of code since no one knows who is working on what. For content it worked out kinda ok, we used locks to prevent people overwriting data of each other, but it was still a pain for everyone in the team to constantly update, get lock, do changes, commit, etc. I guess for artists it would make sense to check out AlienBrain oder just use 3DS Max Vault content system.

    Since I'm not really in the mood to reinstall one of the other servers to 32bit right now, I will test TFS 2010 Beta 1 first. I tested VS 2010 Beta 1 in May, but I did not use the Team Suite edition and have not used TFS for quite a while now. It would be great if VS2010 Beta2 would come out soon, my guess it sometime October or November 2009, probably around the PDC09 in November. I very much like many of the ideas of TFS, but many of the ideas can be handled with external tools too. We use OnTime for most work, feature and bug tracking, plus the great wiki system. Then there are many useful plugins for CodeRush for similar code guideline assurance. I never liked the Test Framework of VSTF, but the tools are just amazing and the integration is top notch, but I still disliked the whole system and much rather use xUnit together with TestDriven.NET instead!

    The most important and really exciting thing about TFS is the source controlling, which just works great. And then many things can be integrated, like using work logs, apply code rules and especially using an agile approach and making the best out of SCRUM, which seems to be easier for new team members to get used to with TFS rather than without it. But just the source controlling alone does not justify TFS and the crazy cost per user for it (in the past I only used it alone). The question is: Is it worth it to evaluate TFS with all the setup pain if we might just abandon it in a week or two anyway. Well, I will try to use TFS 2010 (download almost done) and see if I can get used to it or if I rather should stick with OnTime+xUnit+TestDriven.Net+Some nice active source controlling system+CodeRush+Other tools. BTW: OnTime 9.13 looks great, many cool new features (even an iPhone app for it), just tested it yesterday. At work we still use a 2 year old version since we were so busy on our project we did not upgrade it (works also great, but there are some issues here and there).

    Will report back on TFS 2010 soon and what kind of source control system we gonna use if we ditch TFS all-together (not sure yet, many systems are nice, but did not found a perfect fit yet).

    Great way to run your company?

    I just stumpled across this Techcrunch article about how Netflix runs (or at least says to run) its company. Very american but also very inspiring. I generally agree - however I dont agree with their "vacation" policy. They say: just take as much vacation as you would like. Sounds good but in reality this means, that people will take less vacation because of the internal competition. I sound like a unionist but I think letting people have their fixed days of vacation is best for them and (in the long run) even for the company.

    But now - enjoy