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が一番楽そう?
再度挑戦する。