Delta Engine Blog

AI, Robotics, multiplatform game development and Strict programming language

Trying out Mercurial with VisualHG

I talked a month ago about how much I disliked Subversion at the end of our last project (Fireburst), but guess what happend? We are right back at Subversion and curse it everyday for the pain we have with it.

 

GitWhy? Well, we tried Git and it totally sucked (even worse than I last described). It is not like we were to stupid to use it, I even forced the whole team to use it for 3 days until we finally gave up. As game developers we just lose too much time with it, the disadvantages clearly overshadowed the benefits git gave us. Merging and branching all the time was fun (we made 70 commits in those 3 days with lots of branches and conflicts that were solved pretty easily), but the Visual Studio integration was just useless. In the end we used the Git tools (GitExtensions), but the constant committing to yourself, then trying to sync with the server, ohh that does not work, try to update. Well, that did not work either, some random error message. Trying over and over again. It seemed like every time we wanted to share our work (which was VERY often, sometimes in less than 5 minutes) it seemed like Git was in the way and we had to wait a extra few minutes until all developers could update again without errors.


We also used SourceGears Vault for a few weeks, which I pretty much liked in September (after I complained about the complexity and problems with TFS). But Enrico really did not like it and was able to convince everyone (including me, I also had some strange issues with Vault) that it might not be the ultimate versioning tool after all. For me three main issues prevented me from continue using and purchasing Vault: 1. It always took a very long time (10-20s) whenever I started up Visual Studio and tried to connect to the Vault server over VPN. This is INCREDIBLY annoying, especially when the Get Latest Files at start-up dialog was enabled. 2. Get Latest Files at start-up is useful to get you updated right away when starting to work, but you always have to confirm it, which does not save you any time or clicks. I reported this 2 months ago in the Vault Forums, but nothing has changed in this regard. And third, but probably most importantly: Vault sometimes was completely unable to upload or download files, but when working over VPN (slow internet), but sometimes even at the office. Some random error message is reported, but after this happened to me 2-3 times in one day and I certainly lost an hour of work already, I gave up on Vault. It still is integrated the best way into Visual Studio and has really nice features, but I really need some convincing arguments to force everyone in the team to use it and then even to convince the other CEOs that we will buy all those licenses.


We also tried some other versioning tools like Perforce, TFS, SourceSafe and other crap for a short while, but they all were way worse than Vault or Subversion. Perforce is like working in an environment from 1995 and why the hell would I want to pay 900$ per user for that? TFS is also way too expensive and while integrated nicely into Visual Studio, no one really liked it in our team. And finally SourceSafe is completely useless crap. It was not hard to convince everyone that SourceSafe would not help us much. I don't want to reiterate arguments brought up many years ago, read it yourself: here, here and here.

 

TortoiseSVNAnd thats why we went back to Subversion since we know what the problems are, how we can circumvent them and live with it. But even then we still curse it every day. I just read this really fun to read page about someone that really hates Subversion too. I think I mentioned some other bad articles about subversion before. I think Subversion is ok if you just want to make a simple checkout from CodePlex, SourceForge, GoogleCode or similar sites. As long as you only have source code in there and you don't mind merging files all over the place, it can work for a while. There are also great plugins like TortoiseSVN for the Windows Explorer and VisualSVN and AnkhSVN for Visual Studio, which all are great, but it is still subversion and each of those tools has its own set of problems:

 

  • TortoiseSVN isn't integrated in Visual Studio, it is akwared to do your commits and updates in the Windows Explorer, there is always an extra work step and people don't checkin very often.
  • VisualSVN is not implemented as a MSSCI provider, so using it is similary akwarded. It also does not detect added/removed files properly. VisualSVN Server is however the best tool ever for Subversion!
  • AnkhSVN is a great tool and supports everything I want, it is integrated nicely into Visual Studio, it detects which project files have been added, moved or removed. But guess what, it is horribly slow. Once you got a few hundert files in your solution, you can forget about AnkhSVN, it is completely useless. This website with just 30MB of files checked in, it takes 10+ minutes to do a simple update or commit, which is very retarded (takes like 3-5 seconds in TortoiseSVN, which is already too long). You can do nothing while the modal dialog of AnkhSVN is open in Visual Studio. This is one of the things that you only figure out after really working with a tool, it might sound good on paper, but the problems later might kill any usefulness.


I started to use Subversion to for the development of this website in the last week, but a few days ago I had to stop, after importing about 800MB from my old blog and the old exDream.com website Subversion totally got on my nerves. I did not even checkin most files (only 30MB was content I wanted to change and backup). I was the only person checking files it, but I worked from 2 locations and even that was too much for subversion. Once I moved a file and did not check it in right away I was in real trouble. Now I just use my good old SyncBackSE to do backups and work directly on the webserver (which is even fast enough with my slow VPN). It worked out after all, but I probably would have saved time by not using Subversion at all, which is not a good argument for a versioning tool.


MecurialDon't get more wrong. I love working with a version control system, getting back old code, merging stuff from all developers together. I just think neither Subversion, nor TFS, SourceSafe, Vault, Perforce, Git, etc. is really were I want to be. For that reason we will be trying Mercurial this week and see how long we make it. Since Mecurial allows importing from Subversion we can continue working with the same repository as before. Since Visual Studio integration is the most important aspect, we gonna use the VisualHg addin, but also the TortoiseHg addin for Windows Explorer because it is so similar with TortoiseSVN, which we know very well. We gonna report back how it goes, hopefully we won't run into the exact same problems as with Git. My first early tests this weekend were pretty good, it seems to run well. Setup is a little hard first (configuring .hgignore for example, there is not much help, you gotta search a little), but since then it works like a charm (locally at least ^^).