日別アーカイブ: 2010年10月21日

VSSからSubversionへの移行

社内でVSSによって管理されていたプロジェクトがいくつかあったんだけど、それを一気にSubversionで管理しましょうということになった。
理由としては、一部管理されているファイルをSJISではなくUTFにする必要性があったのだが、VSSの相違点比較ではUTFの比較が対応されてなかったのが一因。
また、チェックインからの環境への配置をできるだけ自動化したいという試みがあったためである。

VSSからSubversionへ移行するにはss2svn.exeを使う方法があるらしいが、Webで見ている限りではうまく言ってないようだ。
それに代わるものとして、ss2svn.plを利用した方法が紹介されていたが、これが思ったようにはいかずにずいぶんと手こずってしまったのでまとめたい。

参考サイト

前提

  • VSSのバージョン
    • VSSはちょっと古いVisualStudio6のもの。ただ、基本的にはVisualStudioの後継でもそんなに大きな変更はないのではないかと思っている。VisualStudio2008はUTFに対応しているらしい(未確認)ので、もしかしたら構造が違うのかもしれない。
  • Subversion
    • 面倒なのでTracLightningを利用している

インストールするもの

  • ss2svn.pl
  • ActivePerl
  • JCode(パールモジュール)
  • File-MMagic(パールモジュール)
    • JCodeとFile-MMagicはPPMを利用すると楽

C:\>ppm install Jcode
C:\>ppm install File-MMagic

準備

  • PATHにVSSのパスをセットする

SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\COMMON\VSS\win32

  • SSDIRにVSSのレポジトリをセットする

SET SSDIR=\\SERVERNAME\REPO_PATH
※「\\SERVERNAME\REPO_PATH」はVSSのデータディレクトリへのパス

  • SSJP.DLLの退避(VSSフォルダのWin32内のSSJP.DLLをリネームする)

実行

  • 1.移行先のSubversionインストールサーバーにてレポジトリを生成する。
    • TracLightningを利用していると、通常はTracまで作られてしまうのでsvnadminコマンドでSubversionのレポジトリのみ作る。ここでTracまで作ってしまってもいいのだが、この場合はTrac上のタイムラインが、すべて移行実行日のコミット扱いになってしまう。

svnadmin create E:\TracLight\project\hoge

  • 2.pre-revprop-change.bat設定
    • 中身をexit 0のみにしたpre-revprop-change.batをsvnのhooksに入れる。怖いからsvnのレポジトリフォルダにも入れておいた
  • 3.Subversion側にユーザーを追加
    • 予め、VSS側に登録されていたユーザーを登録しておく。この時、例え実際には違ったとしてもユーザ名とパスワードを同一にしておくと楽
  • 4.ss2svn.plの認証部分を変更する
    • 1462行目付近でSvnへのログイン認証設定があるのでここを改変する。

$cmd = “$cmd –username \”$self->{user}\” “
. “–password \”$self->{password}\””;

$cmd = “$cmd –username \”$self->{user}\” “
. “–password \”$self->{user}\””;

に変更。認証を通すようにした

  • 5.ss2svn.plを実行する

vss2svn.pl –vssproject $/REPO/NAME –svnrepo http://REPO/URL –setdates –utf8 –vsslogin”admin;”
※「$/REPO/NAME」は移行対象のプロジェクトへのSSDIRからの相対パス
※「http://REPO/URL」は移行先Subversionのレポジトリへのパス

よくわからないが、–vsslogin設定がないと反応なしになった

  • 6.TRACの作成
    • create-project.batを一部改編してcreate-project2.batを作る。以下の2行を削除

if exist “%TL_PROJECT_HOME%\svn\%PROJNAME%” goto :EOF
svnadmin create “%TL_PROJECT_HOME%\svn\%PROJNAME%”

コマンドでプロジェクト作成

C:\>create-project.bat hoge

後処理

・SSJP.DLLを元に戻す

苦労した点

一番手こずったのはss2svn.plを実行時にFATAL ERRORが発生したこと。これが何度やっても同じバージョンで失敗する。
VSSのデータが破損しているのかと疑いをかけ、VSSのDataフォルダに対してAnalyzeコマンドを実行してみると「一貫性エラーが発生した」と出た。
AnalyzeでVオプションを追加しても意味なかったけど V4オプションを追加して実行してみると、問題となったファイルが発覚。どうやら、バージョンの途中でSJISからUTFに変換したファイルが、相違点をチェックしようとした際に問題を起こしていたみたい。
幸い、そういうファイルは少なかったのでこれは移行後に手動でコミットする形にして実行したら実行できた。