Suggested vss2svn workflow (was RE: Invalid change ordering?)

Dirk vss2svn at nogga.de
Wed Feb 7 16:44:49 EST 2007


Applause. This is very good overview for all newcomers and also a 
detailed description. If I only could write technical documentation in 
English like this, I wouldn't be that lazy doing it.

Thanks, I will add it to the WIKI.

Dirk

Jonathan Perret schrieb:
>> Regarding the "live" database, you can simply make a file copy of the
>> VSS files to your local computer and run the conversion from there. If
>> you do it in a silent minute, during the night, you could probaply get
>> a pristine copy.
>>     
>
> Definitely ! A copy of the database should be the first thing you do to
> begin your migration. Actually, in case anyone is interested, here is
> the complete workflow I used for our migration :
>
> 1. Choose a powerful, dedicated machine to run the migration. It can be
>   your own laptop, or another server just as long as it is not the VSS
>   server. I used our automated build server since it already had Perl
>   and is a pretty beefy box that is somewhat underused. From this point
> on
>   I'm assuming a Windows box was selected.
>
> 2. Make sure the following software is available on that machine :
>  - SourceSafe 6.0d (please avoid VSS 8, I'm sorry to say this but they
>    actually managed to make it less stable). Make sure SS.exe and 
>    ANALYZE.exe are on the PATH.
>  - ROBOCOPY.EXE, you can get this from the Windows Resource Kits, or
>    many other places on the web. Make sure it is on the PATH too.
>  - vss2svn (preferably in Perl source form, so that you are ready for
>    a quick patch if anything goes wrong) and its dependencies.
>  - the latest Subversion, make sure it is in the PATH too.
>
> 3. Log in to that machine using an account that has read-only access to
>   the VSS share. I'll actually be altering the VSS database before the
>   migration and I'm a bit paranoid about accidentally destroying our
>   production database. Notice that this read-only access prevents the
>   SourceSafe client from accessing the VSS database, but that's
>   actually a good thing.
>
> 4. Create a local copy of your VSS database using ROBOCOPY :
>  ROBOCOPY /MIR \\vssserver\vss C:\svnmigration\vsscopy
>
> 5. Open srcsafe.ini in the VSS db copy, make sure to remove
>   any references to shadow folders and a journal file : again
>   we don't want local operations on this copy to disrupt the
>   production environment.
>
> 5. Create a directory somewhere, call it something like 
>   "C:\svnmigration\migration1".
>
>   You'll be doing several migrations and you may want to compare the
>   results from one to another so it's a good idea to archive the
> attempts.
>   I went further and copied the whole of vss2svn under this directory,
>   this allowed me to also archive what little tweaks I had made to the
>   script for each attempt.
>
> 6. If you want to keep your hair through your migration, a key
>   word is "automate" ! Create a script using whatever systems automation
>   language you are comfortable with. I guess Perl would be a logical
>   choice, but I selected CMD scripts (batch files) since I didn't know
>   enough Perl to do what I wanted. Your script should do the following :
>    a. synchronize the data in the local copy of the VSS database :
>
> 	SET SSDIR=C:\svnmigration\vsscopy
> 	ROBOCOPY /MIR \\vssserver\vss\data %SSDIR%\data
>
>      (notice I synchronized only the data subdirectory since I want
>       to keep the local modifications to srcsafe.ini that I did above)
>      (notice also that the /MIR switch to ROBOCOPY makes it remove
>       files that are no longer present in the VSS db, and also
>       avoids copying files that have not been modified, which means
>       this operation should run pretty fast for each migration)
>
>    b. "SS Destroy" any projects/files you don't want to migrate :
>
> 	SS Destroy -I-Y $/ProjectIDontWant
>     
> 	(-I-Y means "shut up and do it" to SS.exe)
>
> 	I have found that destroying projects in a copy leads to
> 	cleaner migrations than the alternative which is to
> 	backup/restore only selected projects.
>
>       Some of the projects/files that you don't want may have been
> deleted,
> 	but not purged. You need to recover them first :
>
> 	SS Recover $/MyProject/HugeFileThatWasCheckedInByMistake.zip
> 	SS Destroy -I-Y
> $/MyProject/HugeFileThatWasCheckedInByMistake.zip
>
>    c. Run ANALYZE on the database copy :
> 	
> 	rmdir /S/Q %SSDIR%\data\backup
> 	ANALYZE -f -i- -v4 %SSDIR%\data
> 	copy /Y %SSDIR%\data\backup\analyze.log .
>
> 	(ANALYZE flags : force repair, no interaction, deep analysis)
>
>    d. Run vss2svn :
> 	
> 	perl -Ivss2svn vss2svn\vss2svn.pl --ssphys vss2svn\ssphys.exe
> --vssdir %SSDIR% --verbose --timing > vss2svn.log 2>&1
>
> 	(this assumes you made a local copy of vss2svn)
>
>    e. Create and load the SVN repository :
>
> 	rmdir /S/Q repos
> 	svnadmin create repos
> 	svnadmin load repos < vss2svn-dumpfile.txt > svnadmin.log 2>&1
>
>    f. Do any post-migration cleanup in svn :
>
>       SET SVNREPOS=file:///%CD:\=/%/repos
>       svn mv %SVNREPOS%/MainBranch /trunk
>       svn rm %SVNREPOS%/OldProject
>
> 	(see point 10 for why it is sometimes better to remove a
> directory from
> 	the SVN repository than to purge it from VSS beforehand)
>
> 7. Launch your script, making sure to redirect all output to a log file
>    that you can analyze later for errors.
>
> 	migrate.cmd > migrate.log 2>&1
>
> 8. Let time pass for a bit. If you want to know what the migration is
>    doing at any point, you may find http://tailforwin32.sourceforge.net/
>    useful to look at the log files as they are being appended to.
>
> 9. Once the migration is complete, take a look at the results. What
>    I did was launch an svnserve on the migration machine and browse
>    the repository from my laptop using TortoiseSVN.
>
> 10. You'll find something you don't like about the migration results.
>    No problem, just create a "migration2" directory, copy vss2svn and
>    your script there, make any fixes you need and start again.
>
>  Some random things to look out for :
>
>  - It is a good idea to grep for ERROR in the vss2svn.log file, but
>    don't get frightened by every match : unfortunately vss2svn does not
>    try very hard currently to rank the errors from benign to fatal.
>
>  - Are there "too many" files in /orphaned ? You may have had a heavy
> hand in step 6b above (destroying projects). Let's say for example a
> file was initially created in $/Version1/file.txt, and then $/Version1
> was shared/branched to $/Version2. If you destroy $/Version1,
> $/Version2/file.txt is orphaned ! It is much better to keep $/Version1
> in the migration, then add "svn rm /Version1" to step 6f if you truly
> want to hide that old project.
>    In short, try to only destroy truly irrelevant projects.
>
>  - What are the biggest revisions in your new SVN repository ? This is
> easy to find by peeking into repos\db\revs. Most of these files should
> be pretty small, any that exceeds a few megabytes is suspicious (well,
> depending on your data of course, if you were handling large assets in
> VSS it could be just fine). In my repository only 85 revisions out of
> 24500 exceed one megabyte.
>    To see the details of a "suspicious" revision :
>
> 	svn log svn://path/to/repository/root/ -v -rREV
>
>    This could help you find the instances of
> HugeFileThatWasCheckedInByMistake.zip that bloat your repository for no
> good reason. Go then to step 6b and add such files to the "black list".
>
> That's it ! I hope these suggestions are useful to someone going through
> a migration.
> Perhaps the vss2svn wiki should contain information of this kind ?
>
> Cheers,
> --Jonathan
>
> _______________________________________________
> vss2svn-users mailing list
> Project homepage:
> http://www.pumacode.org/projects/vss2svn/
> Subscribe/Unsubscribe/Admin:
> http://lists.pumacode.org/mailman/listinfo/vss2svn-users-lists.pumacode.org
> Mailing list web interface (with searchable archives):
> http://dir.gmane.org/gmane.comp.version-control.subversion.vss2svn.user
>
>
>   



More information about the vss2svn-users mailing list