eclipse metadata and multiple workspaces

The eclipse metadata for a workspace is still a mess in eclipse 3.5.  Not only is the file naming and structure inconsistent (what's with all the hidden files within hidden files, while some are not hidden in a rather random way) but it mixes things that should be persisted (such as preferences, and launch options) with things that should not be persisted (such as history and cache files).  All of this makes it rather painful to try and version control a workspace efficiently so that one can use the important bits of a workspace in different machines with minimal fuss.  For example, if the .metadata is in your version control files, doing a status results in reams of files that one does not want to version control, but if it is outside the tree then settings and launch configurations don't get added and can be a real pain to reconfigure every time.

My current strategy for each workspace involves:

  1. Keep all projects external to the workspace and the project files in the version controlled locations, then import the projects to the workspace while making sure the Copy option is off.
  2. Regularly export the preferences (File ->Export -> Preferences) to a location within the version controlled tree (I use a folder called eclipse/keep/workspace for this, where workspace is the name of the workspace).  This is a pain, but the preferences are scattered throughout the metadata and cannot be easily separated out automagically.
  3. Use a symbolic link for the launch folder normally kept in .metadata/.plugins/org.eclipse.debug.core/.launches that points to a folder in your version controlled area. This allows all the launch configurations to be easily version controlled.

Do you have ideas on keeping the workspace clean, portable, and version controlled yet manageable in size?