VSS(Visual Source Safe)からSubversionへの移行(未完了)

方法

以下の3通りの方法がある。

  • VSS2SVN(古いver、VSSのss.exeを使ってVSSのデータを読み込む)を使う
  • VSS2SVN(新しいver、VSSのファイル形式を認識して、直接変換する)を使う
  • vss2cvs.plと、CVS2SVNを使う

それぞれの特徴と問題点

VSS2SVN(古いver、VSSのss.exeを使ってVSSのデータを読み込む)を使う
  • ssjp.dllを無効にしておく必要がある。
  • 時間がかかる
  • 何かエラーが起こって失敗したが、エラー内容を忘れた。
VSS2SVN(0.10.0.beta2, 新しいver、VSSのファイル形式を認識して、直接変換する)を使う
  • beta版であり、日本語環境&大規模リポジトリでは、まともに変換できない。詳細は下に。
  • 直接VSSのファイル形式を認識して変換するので、古いバージョンに比べて、時間がかからない。

とはいっても、大規模リポジトリだと、5時間ぐらいかかったりする。

  • 途中で止めて、再開することができる。(resumeオプション)
  • vss2svn.plにて、警告が出る

"Wide character in print at /PerlApp/Vss2Svn/DataCache.pm line 77."
問題なし。

  • 変換に失敗する(原因1)

vss2svn.plのDoSsCmd関数にて、xmlのparserが認識できないコードの削除が不完全。
以下の追加が必要。

    $gSysOut =~ s/\&\#x//g; # 
    $gSysOut =~ s/\&\#X//g; # 
  • 変換に失敗する(原因2)

vss2svn.plのDoSsCmd関数を見れば分かるが、windows-1252しかサポートしてないっぽい。
そのため、日本語のCommmitLogのHistoryなどが全滅する。

  • 変換に失敗する(原因3)

VSSのファイルには、物理名がつく。そして、ファイルが削除されると、
その物理名はまた別のファイルで再利用される。
しかし、vss2svn.plはそれを考慮してない?(あまり調べてない)

  • 他にも問題がいろいろ起こり、断念。

無理やりエラーを無視して作ったSVNのdumpファイルをSVNで読むと、
途中までしか読めない&日本語のCommitLogのHistoryが全滅した。
vss2svn.plをまともに動くように修正するのは、手間がかかるので、あきらめる。

vss2cvs.pl(ver 1.15)と、CVS2SVNを使う
  • ssjp.dllを無効にしておく必要がある。
  • 恐ろしく時間がかかる。(大規模リポジトリで、vss2cvs.plにて、5日間とか)
  • WinCVSを入れる必要がある
  • vss2cvs.plにて、Dateのパースの失敗。

日本時間の形式に修正する。

545,546c545,546
< 	unless(m@^User:[\s]*(.*)\s+Date:\s+(\d+)/(\d+)/(\d+)\s+Time:\s+(\d+):(\d+)([ap])@);
<     my ($user, $mo, $day, $yr, $hr, $min, $sec) = ($1, $2, $3, $4, $5, $6, 0);
---
> 	unless(m@^User:[\s]*(.*)\s+Date:\s+(\d+)/(\d+)/(\d+)\s+Time:\s+(\d+):(\d+)@);
>     my ($user, $yr, $mo, $day, $hr, $min, $sec) = ($1, $2, $3, $4, $5, $6, 0);
563,564c563,564
<     $hr = $hr % 12;
<     if($7 eq 'p') { $hr += 12; }
---
> #    $hr = $hr % 12;
> #    if($7 eq 'p') { $hr += 12; }
  • VSSからCVSへの移行は、一部の日本語化けを除いて、うまくいったっぽい
  • cvs2svnで失敗。原因未調査。

結論

VSS2SVNの古いverが一番楽そう?
再度挑戦する。