miau's blog?

VSS→SVN移行

VSS から Subversion への移行に関して数ヶ月前に検証してたんですが、先日 Subversion 用サーバが準備できたそうで。ようやく移行できましたのでそのお話。

長くなりそうなので何回かに分けて書く予定ですが、まずは VSS からの移行スクリプトである vss2svn に関して。

vss2svn: Subversion

※検証したのが数ヶ月前なので、既に古い情報になってしまっているようです。参考程度にどうぞ。
最新版は下記 URL から落とせるっぽいです。

Vss2Svn - Trac

(2009-09-11 追記)

最新版はちょっと難ありでした。

vss2svn.exe を試してみる→やっぱりやめ - miauの避難所

また、さらに改造したバージョンを作る機会がありました。場合によってはこちらのバージョンをご利用ください。

vss2svn.pl のユーザ認証対応ほか - miauの避難所




ハマった点諸々書いてみます。

■エラー

svn: MKCOL of 'xxx': 405 Method Not Allowed

みたいなエラーになってしまうことがたまにあった。
メッセージわかりにくいけど、
Psludge ≫ Weird Subversion Corner-case
ということで、要するに既存フォルダを作成しようとした時に出るエラー。
設定不備があったもんで VSS からの移行を何度か試したんだけど、前回分のデータが残っているせいらしい。work フォルダを一旦削除することで解決。

それにしても、VSSから取得/Subversionへのコミット それぞれで数時間を要するので、できればこの二つは分離してほしかった。コミットに失敗しただけで、VSS再取得からやり直すのは面倒だったので。

■文字化け

なんか svn.exe の結果が文字化けすることが。

Subversion - YImai's memo→svn.exeとTortoiseSVNを共存させる方法

こちらを参考に、APR_ICONV_PATH を指定することで解決。

■VSS のバージョン問題

Visual Studio の SP6 当ててる場合は

Project <> has been destroyed; An Item with the name <> already exists

みたいなエラーになる。(参考

仕方ないので VSS のバージョン 6a を使用。(6a 入れてた人の VSS フォルダをごっそり貰って使用)
あと SSJP.DLL があると正しく動作しない部分があるので、一旦これを別名にリネームして実行。

■日付指定

どうせなら VSS でのチェックイン時刻を SVN 側にも引き継ぎたいわけですが、--setdates オプションでこれを実現できます。
ただ、途中でメッセージが出るように、サーバ側で pre-revprop-change フックを設定しておく必要あり。

hooks フォルダにある pre-revprop-change.tmpl を pre-revprop-change(Windows だと pre-revprop-change.bat)としてコピー。
判定部分を exit 0 とかに書き換えて、実行権限付与しておけばOK。

■svn:mime-type の設定

以前書いたように、svn:mime-type を設定していないと、Trac での表示が文字化けしてしまいます。
とりあえず vss2svn.pl を書き換えて、自動判別するようにした。

自動判別モジュールは、

File-MMagic - Namazu - Trac

に書いてあるように色々あるんだけど、ビルドできなかったり認識に不備があったりしたので、結局下記の流れに。

・File::MMagic で MIME Type 判別
・ただし Office 系のファイル(.doc、.xls、.vsd、.ppt、.mpp)や その他ファイル(.msi、.db)が application/msword として判別されてしまうので、application/msword と判別された場合は、拡張子を元に自前の判別テーブル(IIS の設定から持ってきた)で判断
・MIME Type が text/* だった場合は、Jcode で文字コード判別→IANA での定義名に置き換えた上で charset を付加

「charset として Shift_JIS を設定しましょう」みたいなページもたまにみかけたけど、機種依存文字のことを考えると Shift_JIS よりも Windows-31J のほうがいいと思う。

■まとめ?

とりあえずそういった感じの完成品。

vss2svn.pl

一部フォルダ名にスペースがある場合の対応も行ってます。
# 今思うと eol-style も設定したほうが良かったかも。

下記手順で実行。フォルダのパス等は面倒なので書き換えてません。

cd /d D:\vss2svn

:: VSS の設定。srcsafe.ini の場所を指定
set SSDIR=\\vss-server\vss_data

:: PATH の設定
set PATH=%PATH%;D:\Microsoft Visual Studio\Common\VSS6a\win32;D:\svn\bin

:: 上記文字化け対策
set APR_ICONV_PATH=D:\svn\iconv

:: SSJP.DLL のリネーム
ren "D:\Microsoft Visual Studio\Common\VSS6a\win32\SSJP.DLL" "SSJP.DLL~"

:: vss2svn 実行
vss2svn.pl --setdates --vssproject $/Hoge -svnrepo http://svn-server/svn/Hoge/trunk

:: SSJP.DLL の戻し
ren "D:\Microsoft Visual Studio\Common\VSS6a\win32\SSJP.DLL~" "SSJP.DLL"



(2007-09-14 追記)

ひだまりのなか、想ふこと | vss2svn.plを使ってVSSからSubversionへ移行(詳細手順)

によると、SSJP.DLL の入れ替えに関しては VSS に Service Pack を当ててなくても必要らしいです。ご注意ください。


(2008-09-18 追記)

Referer 見てたらよさげなのが。

VSSからの移行処理をC#で書いてみた - ghostbass1.4β

VSS2005 でも動く& Mercurial への移行もできるそうですよ。


(2008-09-24 追記)

同じく Referer より。

我楽多園: VSS2SVN

Perl や必要なモジュールの導入から説明されていますので、Perl に慣れてない方はこちらも参考にしたほうが。

あとこのままだと日本語のコメントが文字化けしたとの情報も。しばらく移行の予定がないので検証とかできませんが、使う方はお気をつけください。


(2008-10-16 追記)

さらに Referer より。

青木ITプランニング» ブログアーカイブ » vss2svn.plを使ってVSS6からSubversionへ移行

ActivePerl 5.10.x.x で使ったほうがよさそうです。あと一連の処理を行う .bat も公開されています。


(2008-11-04 追記)

「機種依存文字のことを考えると Shift_JIS よりも Windows-31J のほうがいいと思う。」とか書いたけど、Python が Windows-31J を認識してくれなくて Trac がエラー吐くケースがありました。Shift_JIS のほうがいいかもしれません。

posted at 08:56:47 on 2006-11-15 by miau - Category: General No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

miau wrote:

類似ツールのメモ。
CVS, PVCS, VSS, ClearCase, MKS, StarTeam Importer for SVN
ttp://www.polarion.org/index.php?page=overview&project=svnimporter
2007-07-13 10:44:26

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。