Subversion については前々から興味はあったんだけど大きな動機もなくずるずると CVS を使ってきたわけですが,突然使ってみたくなり,PSS と bPSS と tkf と hcom(というライブラリ)の CVS レポジトリを一気に Subversion 化しました.
結構苦労したので備忘録として書いておきます.
環境的には WindowsXP, cygwin です.*nix 上で CVS to SVN な話は結構見つかるんですが Windows 環境での話が少なくて本当に困った.
Subversion のインストール
さてまずは Subversion のインストールだけど,公式サイトから 1.1.3 をダウンロード&インストール.
下記サイトを参考にさせていただきました.
TortoiseSVN のインストール
Windows のエクスプローラ(というかシェル)を拡張して Subversion を GUI から使えるようにするツール TortoiseSVN をインストールしました.
やはり上記サイトが詳しいです.
いろいろいじる
最初,何も考えずに(CVS と同じ気持ちで)単一のレポジトリに対して全部のプロジェクトを詰め込もうとしました.んが,リビジョンがリポジトリ単位でシーケンシャルに付くことから,プロジェクトに関係なくリビジョンがどんどん上がってしまって気持ち悪いのなんの.
というわけで,
のような配置にし,各ディレクトリにリポジトリを配置することにした.さらに各ディレクトリの下に trunk とか branch とかを置くわけですね.
e:/svnroot/
- hcom
- PSS
- tkf
- bPSS
公式ガイドでも推奨されています.
cvs2svn
さて,基本が分かったところで CVS レポジトリを SVN レポジトリに変換する方法を探してみました.一瞬「え,ないの?」と思ったけど cvs2svn というものを見つけました.
最初に見つけたのは下記サイト
http://fuga.jp/~densuke/hiki/hiki.cgi?subversion
Python のインストール
びっくりしたのは Python で実装されているということです.今まで避けてきた Python です.名前からして怖そうとか思ってました(パイソン≠バイソン!).
ここはもう避けて通れないので,まずは cygwin の Python をインストールしてみました.が,結果的にこれは失敗でした.具体的なエラーメッセージは覚えていませんが何かのエラーで止まってしまいます.日本語関連だったろうか.
というわけで気を取り直して Win32用Python日本語版 をインストールしました.
Python 日本語環境用インストーラ(Win32)
http://www.python.jp/Zope/download/pythonjpdist
cvs2svn の設定
cvs2svn は Python スクリプトということで,こちらは cygwin の出番です.
公式サイト http://cvs2svn.tigris.org/ から 1.2.1 をダウンロードし解凍.
cygwin から make install です.
普通は(つまり *nix ならば)これで cvs2svn がパスに通って普通に使えるようになるわけですが,そう簡単にはいきません.Python/cygwin でやった場合は cvs2svn が使えますが,上述のエラーで止まってしまいますし.
というわけで強硬手段です.cvs2svn は cygwin で /bin/cvs2svn に配置されます.これは Windows のパスで c:\cygwin\bin\cvs2svn であり,このファイル自体は Python スクリプトです.一行目に #!/usr/bin/python とあることから一目瞭然ですね.
このスクリプトを Win32 版 Python で動かしちゃいます.
但し,cvs2svn は内部で cvs を呼び出すので Windows のパスに CVS のインストール先を追加する必要があります.私は WinCVS ゴッタニ版を使っているので C:\Program Files\Gnu\WinCVS 1.2_JP をパスに追加しました.
それと,Win32 版 Python を cygwin から簡単に使えるように,こちらもパスに追加しました.C:\Python23 ですね.
さらに,Python/cygwin をインストールしていた場合にはこのリンクを切っておきます.(Python/cygwin をインストールせずに行った場合には不要だと思うが cvs2svn を make install できないだろうから結局必要なんでしょう)
rm /usr/bin/python
cvs2svn の実行
そして cygwin 上で下記のコマンドを実行します.
カレントディレクトリの CVS のレポジトリのコピー cvsr があるとし,../svnroot/proj に Subversion のレポジトリを配置すると仮定します.ファイル名に日本語が含まれていると失敗するので encoding も指定します.
$ python c:\\cygwin\\bin\\cvs2svn --encoding=Shift_JIS -s ../svnroot/proj cvsr
結果
結局 PSS のレポジトリを cvs2svn にかけたら20分以上かかりました.
cvs2svn Statistics:
------------------
Total CVS Files: 1451
Total CVS Revisions: 5956
Total Unique Tags: 3
Total Unique Branches: 8
CVS Repos Size in KB: 555359
Total SVN Commits: 257
First Revision Date: Fri Oct 05 03:40:52 2001
Last Revision Date: Sat Mar 12 21:13:48 2005
------------------
Timings:
------------------
pass 1: 41 seconds
pass 2: 0 seconds
pass 3: 0 seconds
pass 4: 8 seconds
pass 5: 37 seconds
pass 6: 0 seconds
pass 7: 0 seconds
pass 8: 1240 seconds
total: 1329 seconds
まぁ,ブランチ切ったりとかで結構複雑だし,ちょっとしたレポジトリなら数秒で変換できるんでしょうね.
お,ファーストリビジョンが 2001/10/05 なのか.CVS で管理し始めてからも早4年ですか.