-
vss2svn.plを使ってVSS6からSubversionへ移行
バージョン管理ソフトをVSS6(Microsoft Visual Source Safe)からSubversionへ移行しました。移行ツール vss2svnに関する記事はあまり多くありませんが、どれもとても参考になりました。ありがとうございます。
- [miau's blog] ここの vss2svn.pl を使いました。日本語ファイル名、日本語のコミットメッセージも移行できました。
- [ひだまりのなか、想うこと] 「やりたいこと」に、日本語のコミットメッセージを移行したい、と書かれています。ここを読まなかったら、日本語はあきらめていたかもしれません。
- [最高のコンピューテュング環境とは] VSSからSubversionへの移行するための、3つの方法を説明しています。
- [我楽多園] VSSからプロジェクト単位のインポートが失敗したり、日本語が文字化けしたとの報告があります。
- [pumacode] vss2svnの本家。ただし日本語が文字化けします。
動作環境
サーバPC、移行作業PCともに、Windows XP + xamppです。サーバPCにはVSSリポジトリがあり、ネットワーク共有で公開しています。
移行作業PCで、vss2svn.plを実行します。ネットワーク共有上のVSSリポジトリを読込み、移行作業PC内にsvnリポジトリを作成します。また、外部公開しませんが、http: のsubversionサーバとしても動作し、trunkへリネームしたり、tagsやbranchesの作成などの調整をします。
移行後の最終形は、サーバPC内にsvnリポジトリがあり、サーバPCがhttp:のsubversionサーバとして動作します。つまづいた点
vss2svn.plを実行すると、VSSからファイル一覧の取得後、MMagic.pmのなんやかんやのエラーで止まりました。この原因がわからず、2~3日悩みました。結果的に、ActivePerl 5.8.x.x をアンインストールし、ActivePerl 5.10.x.x をインストールしたら、あっさり動きました。
採用しなかった方法
pumacodeのサイトからvss2svnのソースファイルをチェックアウトして、CentOS-5にインストールしました。次に、WindowsPC上のVSSリポジトリをCentOS-5へコピーしました。vss2svnの実行は、あっさり成功しました。subversion用ダンプファイルをWindowsPCに戻し、svnadmin load したところ、日本語ファイル名と日本語メッセージは文字化けしていました。vss2svnのオプションで、- -encoding x-sjis-cp932 などを試しましたが、VSSリポジトリの読込中に、not well format エラーで止まりました。だいぶ時間をかけていたこともあって、日本語メッセージをあきらめかけましたが、もう一度 vss2svn.pl を試すことにして、ActivePerl 5.10.x.x インストールでうまくいったわけです、よかった、よかった。
Perlの不足モジュールのインストール
まず、ActivePerl 5.10.x.xをインストールします。vss2svn.pl を実行 ⇒ 不足モジュールのエラー ⇒ 不足モジュールをインストール、を繰り返します。Jcode、File-MMagicは、ppmでインストールしました。
C:>ppm install Jcode
C:>ppm install File-MMagicTime-ParseDateは、Time-modules-2006.0814.tgzをダウンロード、解凍し、その中のファイルをコピーしました。
C:>copy Time-modules-2006.0814\lib\Time\*.pm C:\Perl\site\lib\Time
xampp と Subversion
xamppの最新バージョンは、1.6.8 で、Apache-2.2.9とsvn-1.4.6モジュールがついてきます。サーバ側のsubversionはバージョンを合わせたほうが確実だと思い、1.4.6をダウンロードしてインストールしました。
- Windows Archive – Apache 2.2.x
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8637&expandFolder=8637&folderID=7495 - svn-1.4.6-setup.exe
http://subversion.tigris.org/files/documents/15/41687/svn-1.4.6-setup.exe
続いて、Apacheのsubversion設定をします。C:\xampp\apache\conf\httpd.conf をテキストエディタで開きます。まず、92行目付近の LoadModule dav_fs_module ~~~ の次行に、
LoadModule dav_svn_module modules/mod_dav_svn.so
を挿入します。次に、 511行目付近の Include conf/extra/httpd-ssl.conf の次行に、
Include conf/extra/httpd-svn.conf
を挿入します。
C:\xampp\apache\conf\extra\httpd-svn.conf を新規作成して、テキストエディタで開き、次の内容で保存します。
<Location /svn>
DAV svn
SVNParentPath “D:/svnrepos”
</Location>svnリポジトリを、D:\svnrepos\project_a や D:\svnrespo\project_b に作り、その下に trunk、tags、branches ディレクトリを作ります。svnリポジトリのhttp経由のURLは、http://localhost/svn/project_a となります。
ディレクトリとバッチファイル紹介
実ファイルを整理したもので、実際に動作確認はしていませんので、ご了承ください。ファイル内容とコマンドプロンプトの区別がつきにくく、折り返し表示しているため、見づらいです。「D:\xx>」で始まっていれば、コマンドプロンプトです。
U:\vssrepos
U:\vssrepos\sourcesafe.ini
移行作業PCから見たサーバPCのVSSリポジトリです。ネットワークドライブを割り当てているので、U: になっています。30以上のプロジェクトがありましたが、プロジェクトごとの vss2svn.pl 処理がうまくいきました。D:\svnrepos\project_a
D:\svnrepos\project_b
移行作業PC内の移行先のsvnリポジトリです。D:\svnrepos\pre-revprop-change.bat
VSSのコミット(チェックイン)の日付を移行するためのフック用ファイルです。ファイルを新規作成し、内容は次の1行だけにしてください。D:\svnrepos\project_hoge\hooks\pre-revprop-change.tmpl をコピーして、リネームしただけでは、正しく動作しません。exit 0
D:\vss2svn\v2s_proj.txt
プロジェクト名の一覧です。VSSに、$/project_a、$/project_b とある場合は、次のようになります。project_a
project_bD:\vss2svn\v2s.bat
プロジェクト一覧を読み込んで、各プロジェクトを vss2svn処理をします。内容は次のとおりです。for /F %%f in (v2s_proj.txt) do (
call v2s1 %%f
)コマンドプロンプトで、最初に、VSSのss.exeへパスを通します。
C:\>set PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\Common\VSS\win32
コマンドプロンプトで、次のように実行します。
C:>D:
D:\>cd \vss2svn
D:\vss2svn>v2sD:\vss2svn\v2s1.bat
内容は次のようになります。set proj=%1
if “%proj%”==”" goto err:作業ディレクトリをクリーンアップします
rmdir /S /Q D:\vss2svn\_vss2svn:svnリポジトリの新規作成と、フック用バッチファイルをコピー
rmdir /S /Q D:\svnrepos\%proj%
svnadmin create D:\svnrepos\%proj%
copy D:\svnrepos\pre-revprop-change.bat D:\svnrepos\%proj%\hooks:SSJP.DLL のリネーム
ren “C:\Program Files\Microsoft Visual Studio\Common\VSS\win32\SSJP.DLL” “SSJP.DLL~”:vss2svn 実行
set SSDIR=U:\vssrepos
vss2svn.pl –setdates –vssproject $/%proj% –vsslogin Admin,PASSWORD –svnrepo http://localhost/svn/%proj% –noprompt:SSJP.DLL の戻し
ren “C:\Program Files\Microsoft Visual Studio\Common\VSS\win32\SSJP.DLL~” “SSJP.DLL”:フック用バッチファイルを削除する
del D:\svnrepos\%proj%\hooks\pre-revprop-change.bat:err
プロジェクト1個だけを処理したい場合は、コマンドプロンプトで、次のように実行します。
D:\vss2svn>v2s1 project_a
trunk作成とチェックアウト
VSSの$/project_a をsubversionリポジトリに移行直後のパスは、リポジトリ/project_a となっているので、Subversion慣例のtrunkにリネームし、必要に応じて、tags、branchesを新規作成します。D:\workspace\project_a にチェックアウトします。コマンドプロンプトで、次のように実行します。
D:\>cd \workspace
D:\workspace>rmdir /S /Q project_a
D:\workspace\project_a>svn move -m “” http://localhost/svn/project_a/project_a http://localhost/svn/project_a/trunk
D:\workspace\project_a>svn mkdir -m “” http://localhost/svn/project_a/tags
D:\workspace\project_a>svn mkdir -m “” http://localhost/svn/project_a/branches実ファイルで上書き
チェックアウトしたファイルを確認したところ、LF改行のファイルが、CRLFになっていました。VSS6がチェックイン時に改行をCRLFにしてしまうのかもしれません。VSSの作業ファイルはLF改行のままだったので、VSS作業ディレクトリからsvnチェックアウトディレクトリへ上書きコピーしました。VSS作業ディレクトリの各ファイルはReadOnly属性であり、これを上書きコピーしたので、ReadOnly属性を解除します。また、vssver.sccもコピーしてしまったので、これを削除します。最後に、svnコミットします。コマンドプロンプトで、次のように実行します。
D:\workspace>cd project_a
D:\workspace\project_a>attrib -R /S *.*
D:\workspace\project_a>del /S /Q vssver.scc
D:\workspace\project_a>svn commit -m “vss to svn” .サーバPCのsvnリポジトリへ
サーバPCのSubversionのバージョンも1.4.6なら、D:\svnrepos\ を丸ごとコピーすれば動くはずです。移行作業PCとサーバPCのSubversionのバージョンが違う場合は、移行作業PCでエクスポートして、サーバPCでインポートします。
まず、移行作業PCでエクスポートします。コマンドプロンプトで、次のように実行します。
D:\>cd \svndump
D:\svndump>svnadmin dump D:\svnrepos\project_a >project_a.dat*.datをサーバPCへコピーして、インポートします。移行作業PCもサーバPCも同じディレクトリ構成と仮定します。コマンドプロンプトで、次のように実行します。
D:\svndump>rmdir /S /Q D:\svnrepos\project_a
D:\svndump>svnadmin create D:\svnrepos\project_a
D:\svndump>svnadmin load D:\svnrepos\project_a <project_a.datTortoiseSVN(トータスSVN)のバージョンは?
私は、1.5.2をインストールして使っています。http: や svn: で使う分には問題ないと思います。
Leave a reply



最近のコメント