Converting from CVS to SVN (without history)

  • Use cvs export instead of checkout as indicated in subversion's FAQ. So you wont get CVS subdirectories
  • Before starting, add CVS and .cvsignore to the global subversion ignore list
  • Check for auto-props in the subversion config file. If you set the svn:eol-style to "native" and svn:keywords to "Id" for your source files then you might save a lot of manual work later.
  • Then create the initial folder structure in svn (trunk/branches/tags).
  • Check out the new trunk from the svn repository to an empty directory.

This way you have a working copy, which makes the next steps easier.

  • Get the project files from CVS into this SVN working copy. If you checkout from cvs, you can use this working copy as a shared working copy to transfer future changes from cvs to svn. If you use cvs export, then you only convert the current cvs "snapshot" to svn.
  • You should verify that all text files your project are using 8 bit character sets like ASCII, Latin, ANSI or UTF-8. Subversion can not handle UTF-16 files as text files. You can store them in the svn repository, but only as binary files (that means no CRLF conversion, no keyword expansion, no textual diff).
  • Now ADD (not import) the project to svn.
  • A nice idea is to create a tiny script that recurses through the project folders (after it has been added to the SVN repository) and does something like svn propset svn:ignore -F .cvsignore . . See the attached script which does just that :-)
@echo off

echo This program imports all .cvsignore contents into the svn:ignore property.
echo.
echo Current directory: "%cd%"
echo.

pause

echo.
echo Searching ...
call :CheckCVS "%cd%"
for /D /R %%i in (*) do call :CheckCVS "%%i"
echo Done

:: Ende
goto :eof

:CheckCVS
	set _cvs=%~1\.cvsignore
	echo Path "%~1"
	if exist "%_cvs%" (
	   echo setting "%_cvs%"
	   svn propset svn:ignore -F "%_cvs%" "%~1"
	)
	set _cvs=
goto :eof

This converts the CVS ignore list to the correct subversion ignore properties.

  • now do n svn commit!