We use ClearCase at my workplace. Part of our standard process when code is merged to the main (trunk) branch is to completely eradicate all of the versions on development and integration branches. Because this wipes out all of the check-in comments that went along with these versions, our source files have to have a lengthy prologue comment that identifies each change.
On a few occasions I have pointed out that this negates one of the fundamental reasons for using a version control system, and stated that by removing versions it becomes impossible to see who originally worked on something, when problems got introduced, etc. People checking in new versions have learned not to bother entering a check-in comment because it's just going to be deleted anyway.
The justification I have heard for removing the old versions has usually just come down to "feel-good" reasons. My more experienced coworkers feel that removing these old branches makes the version trees for files "cleaner". They claim that there is no reason to keep these old versions around once it's been merged to our trunk. They're also concerned that other developers will accidentally keep these outdated branches in their view config specs. Finally, they argue that removing these branches saves disk space on the CM server.
Am I right to have a bad feeling about this, or are there other development shops out there who operate successfully in this way? If you also think this is a bad idea, what other arguments in favor of keeping old versions would you supply? If you have operated successfully with this kind of process, what sort of benefits have you observed?
Edited to clarify: Previous versions of the trunk are always preserved. It's the branches where the stuff originally got created or modified that are removed.