Source Control: Anything But SourceSafe

OK I’m going to have to pipe up in favour of ClearCase, seeing as noone else will.

For all its flaws (and there are many) ClearCase is a real source code control system. It is extremely powerful, supporting extensive branch/merge capabilities, triggers, labeling and customisation up the wazoo. The ‘dynamic view’ feature (which exposes a workspace as a ‘live’ network-based filesystem) is incredibly powerful and useful. If you can get it working, the build-avoidance stuff (which copies object files from peer workspaces rather than invoking the compiler) is amazing, and AFAIK unique. Clearcase also has the capacity to handle extremely large projects with many developers across many locations. In my years of using it, it has never once lost my data. In short, it’s reliable.

But that power and reliability comes at a high cost. Clearcase costs a lot in terms of outright expenditure on licensing, but also training for users, the need for administrators, LAN/WAN bandwidth, etc etc. Clearcase is also quite clearly showing its age and the adverse effects of too-many mergers and acquisitions. So it’s very quirky, if not outright buggy.

I am glad that there are competitors like subversion that are gaining traction and credibility in the source control world. But ClearCase is still a formidable product with many redeeming qualities despite its flaws.

Thankfully I have such a poor memory that two years of sourcesafe use didn’t teach me any bad habits.

I do remember the IT guy having to rebuild the database for it every couple months, and a few very close calls… don’t use sourcesafe!

While individual developers at my place were using source control, but policy came down from above for all developers do use a single method of control.

Their choice: Subversion

I had my own crap version of source control and never used an actual software package - I never learned how to do “real” control. So what to do? As Jeff suggests, I read the damn book (it’s free!)

I used the TortoiseSVN overlay and it totally rocks. I have had no problem with it and because of Tortoise, it was easier for me to integrate the entire versioning process into my workflow.

The only threat on this move is that we are still in a trial-ish period to see if Subversion is really the product we want to use. This article is great as a resource for some actual thoughts on other packages if we go that route. Thanks all!

Oh…and I spoke on version control in a one-man environment a little while ago. In case anyone is interested in the read:

http://www.morningtoast.com/index.php/2006/08/one-man-version-control/

Thanks

Just for the record, I’ve been using SourceSafe for years, accessing it through its well known proxy, Source Offsite. I’ve used it with various teams of different sizes and a number of projects, some large, some small…works great ---- not sure I understand what the fuss is all about.

P.S. I do NOT consider that I’ve been poisoned by it!

I started working at a place that uses ClearCase about 6 months ago.

I will never accept a position at a company that uses ClearCase again. This has moved to the top of my list of things to look out for when scanning a job posting.

Yes, it’s true, it hasn’t lost any of my code for me yet…but that’s because it’s so damn painful to check stuff in, and it has so many checks and balances to prevent you from doing something wrong that you hate it the 99% of the time that you’re just trying to do something right.

Way too many layers (activities, developer and integration streams, locked files and hijacked files). The UI tools really blow (especially on Linux) and the command line tools are only adequate.

There have been many times when a merge goes haywire and prevents me from checking in code. More than once, I’ve had to remove the entire directory, rejoin the project and copy my code back into the project to get clearcase to accept my changes.

Ick. I hate VSS, but would much rather be using it over ClearCase.

If you use SourceSafe, are you helping the terrorists?

Source Safe actually wasn’t MS’s first productized source control system. I can’t find a link for it anywhere, but in the early 90’s, MS released “Microsoft Delta”…which also sucked :}. We used it at the place I worked before I joined the empire - it was basically a productized version of the system MS was using at the time.

Team System doesn’t do enough client-side tracking

This is true. Team System doesn’t do ANY client-side tracking. It’s the primary architectural difference between Subversion and Team System. Subversion leaves a lot of .svn folder schmutz on the client drive, where it tracks the last version of each file. In Team System, you have to inform the server when you do things.

There is the TS PowerToy which can infer some things from client operations, however:

http://blogs.vertigosoftware.com/teamsystem/archive/2006/04/04/The_Team_Foundation_Power_Toy_and_Undo_Unchanged.aspx

your link mentions that you should avoid off-line renames which I’m guessing is due to this not being tracked client-side

The Subversion documentation has similar warnings, though. Here’s a direct quote from the online docs:

“While you can edit your files with whatever tool you like, you shouldn’t change the structure of your working copy without letting Subversion know what you’re doing. Use the svn copy, svn delete, and svn move commands to change the structure of your working copy, and use the svn add command to place new files and directories under version control.”

Subversion tracks changes at the directory level while VSTS only tracks per-file

VSTS tracks directory changes. Not sure what you mean here.

You can’t create a “simple” source-controlled folder in VSTS

I’m pretty sure you can do this with the command line tool, TF.exe

VSTS doesn’t let you merge between unrelated branches, only parent-child branches

Now this definitely isn’t true. You can do baseless merges.

http://blogs.vertigosoftware.com/teamsystem/archive/2006/07/13/3069.aspx

In my opinion, this is superior to what subversion does. It lets you “merge” anything, even totally unrelated folders!

doesn’t have blame

It’s in the power toy

http://blogs.msdn.com/buckh/archive/2006/03/13/annotate.aspx

Unlike Subversion, I’m guessing you can’t efficiently “switch” local files between branches, reusing the pre-existing client-side files, only transmitting and changing the diffs.

Sure you can-- you just switch workspaces.

I dunno, Oran. Half the items you list aren’t really problems, but signs of a new product that developers are still getting the hang of.

But you’re absolutely right that if you want to run roughshod over the filesystem without telling the server a darn thing, then Team System is definitely not the source control system for you.

I think Subversion is a fine source control system (particularly considering the price) but it has its share of architectural flaws, too. Tags, for instance, are totally a hack: they’re branches! You can check a change into a tag!

WARNING RANT AHEAD…
I really hated VSS until I we started using the Team System Source Control. Now everyone in my team has started uttering the words, “maybe we should go back to Source Safe.” It pains me to say it. I even have theory that MS lost the source code to VSS and that’s why it never gets anything but a button bitmap upgrade. But TSSC is just an albotross around our necks.
We’ve had many issues with the Team System Source Control. It’s freaking terrible.

  1. It has zero support for working disconnected, which is lame.
  2. For the love of god where is the search capability? I want to see what I or another team member has checked out. My two options are a 3rd party tool (Version Control Sidekick) or the command line. WTF?
  3. Check out a file, does it get the latest version? Nope. Have fun with the merge tool! That’s a feature, seriously they said it on the forum.
  4. Check in pending changes. Does everything get checked in? Maybe. Maybe not. It depends on how TSSC is feeling. This has caused us no end of frustration.

I’ve been /sorely/ disappointed with TSSC. I really wanted it to work, but it’s just a half baked beta product at best (steaming pile has also been used to dsescribe it). It’s too bad. I really like VS.Net 2005, but all the Team System crap is just weak and really expensive.
Source Safe may suck in it’s own way but TSSC has wasted so much of our time I think MS should refund some of the cost of those super expensive Team System licenses. When we get time we’re going to ditch it and try to find something we can rely on.

Thanks to the heads up from Alan:


Visual SourceSafe
Purchased from OneTree Software. Shortly after OneTree’s SourceSafe was released, Microsoft preannounced a similar application called Microsoft Delta, which failed to sell. Microsoft then purchased OneTree and renamed SourceSafe as Microsoft Visual SourceSafe.

And thus began the pain. Hard to believe this was in 1994 and SourceSafe has hardly changed at all since. That was over 10 years ago!

More here:
http://groups.google.com/groups?q=%22microsoft%20delta%22

  1. It has zero support for working disconnected, which is lame.

I wouldn’t say “zero support” but the Team System architecture is clearly designed around constant server communication. There is a way to do it, however:

http://blogs.vertigosoftware.com/teamsystem/archive/2006/07/03/2984.aspx

I want to see what I or another team member has checked out. My two options are a 3rd party tool (Version Control Sidekick) or the command line. WTF?

Yeah, it’s just not in the GUI. Join the club. Here, I’ll give you another one that’s easy at the command line but nonexistent in the GUI: you should be able to see all the tags for a file in the Source Control properties dialog for that file.

Check out a file, does it get the latest version? Nope. Have fun with the merge tool! That’s a feature,

The rationale is that getting latest on foo.cs could trigger a chain of dependencies and force an integration.

http://blogs.vertigosoftware.com/teamsystem/archive/2006/05/15/2755.aspx

That said, this is/was a stunningly unpopular design decision and I really wish they would give people the option to switch “get latest on checkout” on if they really want it.

Check in pending changes. Does everything get checked in? Maybe. Maybe not.

Haven’t seen this. We’ve had some intermittent, non-repeatable issues with Get Latest, but never anything with check in. I highly recommend posting on the forums if you can repeat the problem:

http://forums.microsoft.com/msdn/default.aspx?forumgroupid=5siteid=1

At our corp., we were using pvcs which sucked but was reliable. Us devs wanted to swtich to VSTS but we were told to we had to use Serena Dimensions which is so difficult to use that we are considering just seriously to go to VSS2005 because most of the devs are familiar with it and it does work (most of the time). Costs of VSTS and maintenance of Subversion are turns off for upper mgmt. But I’m going to look at Subversion again.

SourceSafe is a real pain in my ass. Its integration with VS is shite. I keep getting errors and weird dialogs with messages like “You should close this program now” and “Could not perform operation”. What operation? WTF are you doing to me? And on top of all this, SS decided to revert every file I modified to a version that was a week old. Imagine sitting down and pressing a key, only to see sixty plus hours of work evaporate before your very eyes. No warning, no “Are you sure you want to do something incredibly stupid?”. Just WHAMMO you’re fxord. For some unknown reason it also decided to push my current work into a recursed version of my development directory, which is the only reason why I’m not swinging at the end of a rope right now. So, in addition to SS, I have a regular backup running multiple times a day. I’m definitely checking up on some of these alternatives.

I recommend SourceGear’s Vault. We have been using it for the last year and a half or so with no complaints. The only thing we’ve had a problem with is some flaky stuff in VS2005, and both Microsoft and SourceGear are pointing at each other to blame.

Another nice thing is that you can set it up to have edit schemes like VSS(check out exclusively - edit - check in) or CVS (check out - edit - merge). It’s up to you. I like VSS’s edit scheme personally. It’s good for small-shop development.

Branch merging is fairly painless in Vault also!

About 5 or 6 years ago, I was using SS one lunchtime to check out a project. Usually it had worked fine, but this particular time it failed in a really odd way. Some of the directories had completely the wrong contents in them.

At about the same time I was noticing this, other developers started complaining that the read-only copy of the source tree (which was updated by script every lunchtime automatically) was suffering the same problem. Random directories contained the wrong files.

To cut a long story short, I discovered that the automated checkout and my manual checkout were conflicting with each other. If the script happened to get in first with its request for a directory, then my request would checkout that directory, not mine. So if the script was asking for fred, and I was asking for bill, I would get fred!

And vice-versa. So when the script and I were both getting the entire source tree, each directory was a race to see who would get in first.

It was easily fixed. I had made the mistake of getting the script to run with my credentials. Once I gave it its own SS id, the problem never happened again.

But it did mean that I was careful from then on never to be checking out twice from the same repository at the same time. Not even from different PCs.

I thought Team System utilzies VSS 2005 as its backend for source control. Am I mistaken?

I thought Team System utilzies VSS 2005 as its backend for source control.

Perish the thought! Team System uses Team System Source Control. It’s a “from the ground up” rewrite. Totally new, very modern, all HTTP based.

http://msdn.microsoft.com/vstudio/teamsystem/team/default.aspx?pull=/library/en-us/dnvs05/html/vs05teamsys.asp

You can download the free client and try Team System source control yourself @ http://www.codeplex.com/ . CodePlex is kind of like SourceForge or GotDotNet, but using Team System as the back-end:

http://blogs.msdn.com/robcaron/archive/2006/05/23/605555.aspx

Well, I am probably the only one over there, but I don’t agree source control is fundamental to the practice of modern software development.

In fact, I don’t see much benefit in complex source control systems. Of course, we need a central repository that enables developers to integrate their code in the common tree, to run automatic builds and nightly tests etc. But I see no need for complex branching and merging systems.

When someones works during two weeks with no merge, I really feel like once the job is done, it is not a computer’s task to figure out how to merge the whole thing and change the model consequently. It is a human job and people will have to communicate and to spend some time on the operation if it has to be a success. An automated system may give you the illusion it worked, but well, deep changes require careful human attention.

When it comes to the ability to dig in older code, I never found any problem that couldn’t be solved with a bunch of daily tarballs of the 7 last days and a tarball of each release.

I recently switced from CVS to subversion, and at least, subversion doesn’t stay in your way with tags that prevent you from doing what you need to do, but hell, I really don’t see any clear benefit of branching mechanisms. It is even dangerous in my opinion as it will let you believe everything went well and you don’t have to pay attention while you should take some time to merge things properly. And when it comes to interaction with non text based tools like an UML modeler, the nightmare begins.