Worth repeating...

This question has come up a lot lately when people hear about or look at Hatteras for the first time. We need an FAQ or something, in which something like the following would be one of the top 5 questions:


Q: Does Hatteras use the Visual SourceSafe exclusive checkout ('locking') model?


A: Hatteras does not use exclusive checkout by default; concurrent checkouts are allowed. Version conflicts (e.g. someone checks in a new version between the time you check out and attempt to check in) are reported when a get or checkin attempt encounters them. However, exclusive checkout policy can be configured by the server administrator. Users with appropriate permissions can also lock items on the fly - for checkout (no-one else can check the item out until they check the item in or remove the lock), or for check-in (normal check out, but noone else can check IN until the locking user checks in or removes the lock).


Obviously there are any number of edge cases that the one-paragraph answer above doesn't cover, but that covers the typical case. So, if you like/prefer the SourceSafe approach, fear not - you can configure Hatteras to work similarly (or use SourceSafe 2005, for that matter). But I know that the SourceSafe model just won't work for lots of folks, and is at least a mild frustration from time to time for still more of you.


The tradeoff, of course, is having to resolve content differences between (at least) your version of the checked out file, the original file, and the latest version that someone else just checked in - we typically refer to these as “yours”, “base”, and “theirs” versions, respectively (you'll hear “original” instead of base and “tip” or “latest” instead of theirs, as well).


The following is old hat to anyone who's familiar with content merging, so skip ahead a paragraph if needs be. At first, the idea that the server could reliably perform an automatic merge between these 3 versions was almost magical to me, and I didn't really trust it to do so. You get used to it, I guess. Hatteras can be told to perform an automatic merge for you, assuming no conflicting changes, which is to say you changed the original file one way and the other user changed it in a different way, such that the code can't tell which is the 'right' one. However, it can safely put together any number of changes that are “yours” (you added/removed/changed a block of the file), “theirs” (they modified a block of the file), or “both” (you and the other user changed the file the same way), and produce a file that encompasses both of your changes. Obviously, whether this file will (for example) compile is a different story, but for typical scenarios (you modified a function, and I added a new function), it works wonderfully.


In addition to automatic merge, you can resolve content differences by telling Hatteras to discard the other user's changes (“Do you challenge me to a duel, sir?”) , discard your changes (“Your kung foo is teh best!” ), stop trying to resolve the version conflict, or perform a “manual merge”. What's even cooler is that you'll be able to configure 3rd-party tools to perform content merges (and to view file differences), based on the file extension, if you so desire. I'm not saying we'll automagically be able to intelligently launch any diff or merge tool out there, but most tools out there take arguments in such a way that we can configure ourselves to call them appropriately. Someone post their favorite diff or merge tool (that I'd be able to setup myself) and I'll show it in action (time and license permitting :-). Among the ones we've tried it against are KDiff3, Araxis Merge, and SourceSafe's built-in visual merge tool.