I'm not a fan of meta posting but this information was so valuable to me that I wanted to keep track of it on my blog just in case something happens to the original article.
If you are one of the unlucky few (I would like to think there are no many of us) still using Visual Source Safe in 2010, then I bet that you've needed to get a version of your project at a given point in time. It happened to me today again and instead of setting with the "Sorry, SS doesn't support that" I set up to find a solution.
I found an old post by Brennan Stehling with the exact instructions to get a point in time snapshot using Visual Source Safe or using Brennan words: Get by date.
If you are unable to use an alternative to SourceSafe like Subversion which works great on Windows, you may want to learn to use certain SourceSafe features which are not available through the visual interface.
Recently I needed to get a snapshot of the code base from a point in time to correct an issue in Production after we have done much new development. Normally with CVS or Subversion I would create a branch which represents the snapshot which is being deployed to Production and then tag the immediate release and each sub release. Unfortunately SourceSafe does not support branching and tagging with the same ease that CVS and Subversion do. For example, SourceSafe has the concept of Labels, but it is not the same as tagging. You can actually put an identical label onto different versions of a file. You can hardly base a snapshot on labels due to that flawed feature.
To overcome this broken functionality some developers will label their code using a date/time stamp, like 2005_10_27_RELEASE_3_1. This can be helpful if you need to know something about an individual file. It just cannot be used in the same way tags are used in CVS and Subversion, but it does give you a pragmatic way to at least logically give the files a unique label.
Fortunately you can pull code from a certain point in time. This will allow you to revert your working files to support an older release. To do this you must use the command-line because Visual SourceSafe does not provide this functionality. To use the command-line, you must set the Environment Variable for SSDIR to the location of your SourceSafe database, such as \\Dev1\VSS where Dev1 is the name of the server and VSS is the name of the share where the database is located. Then create an empty folder and run the following command from the command prompt while in that directory:
ss get $/Project.root to . -vd10/27/2005 -R
This command will recursively pull all files for Project.root from 10/27/2005 to that directory. It may ask you to set your default directory for the project to this folder. Since you likely have a working copy for current development attached to another folder you do not want to do that. In fact, it is best to detach this new folder from SourceSafe entirely after you pull this snapshot as you cannot check in any changes because they may not work with your current development. Perhaps you could create a new project in SoureSafe to hold this snapshot as a sort of manually managed branch. And if you choose to do that, I suggest using WinMerge to help shuttle changes between the two working folders.
Good luck!
There is no much to add to this, simply follow the instructions and you will get the desired result.
If you are wondering how to set up an environment variable on DOS, this is how assuming that your SS location is \\Dev1\VSS\:
SET SSDIR=\\Dev1\VSS\
The source safe program was located on my system at:
"C:\Program Files\Microsoft Visual Studio\Common\VSS\win32\ss.exe"
and here are the two commands together in case you want to copy and paste:
SET SSDIR=\\Dev1\VSS\
"C:\Program Files\Microsoft Visual Studio\Common\VSS\win32\ss.exe" get $/Project.root to . -vd10/27/2005 -R