Sunday 2 March 2008

To call or not to call, a ramble...

The TFS server, that is. LizardTF is a conceptual clone of TortoiseSVN, and while Microsoft undoubtedly learned much from SVN, there are some major technical and conceptual differences between TFS and SVN, the biggest being how much and where check out information is held. The SVN server was designed for the world of open source distributed development. The server holds no information about any clients or what they might be up to. Clients can get latest source, disconnect, work away using a local working base copy, and then res-sync to the server later. Not TFS. The TFS server knows about every client, getting source is not the same as checking it out, no metadata is held on the client (well, there is a cache, but conceptually this is true), to start any editing or any difference checking needs a server call.

I've been making Lizard less chatty with the server when Explorer browsing to speed things up a bit. Lizard *does* take local metadata similar to SVN clients, it can work out if and how a file has changed without contacting the server. I can (and do) avoid server calls in a lot of instances but there is a downside. Only the server can know if another client has changed a file and checked it in. I like that LizardTF shows out-of-date files without being specifically asked to, but it requires a call to the server every time a folder is browsed in explorer. To be honest both on my home setup (running TFS on a virtual PC on the one box) and at work (big TFS server in a rack somewhere) things seem pretty brisk, and it's not really a big worry, but I would like to use LizardTF with Codeplex projects and I haven't actually tried it yet. There are several reasons. 1) Although I mean to make Lizard multi-server, I haven't done so yet. 2) The Lizard source code lives in a TFS server on a virtual PC, this is also what I test against (probably not the best idea, but there you go), and 3) I don't won't to get too distracted. The project has already grown a lot with the diff and merge tools and I want to complete the functionality as-is first.

I guess when I make Lizard multi-server I'll allow users to choose connection level for each registered server. I would also like to provide a full 'off-line' mode with re-sync but I think that will be somewhere down the line.

I do think TFS version control is good and I hate source-safe with a passion, but I miss the elegant simplicity of SVN.

No comments: