Subversion を使ってみる

Subversion については前々から興味はあったんだけど大きな動機もなくずるずると CVS を使ってきたわけですが,突然使ってみたくなり,PSS と bPSS と tkf と hcom(というライブラリ)の CVS レポジトリを一気に Subversion 化しました.
結構苦労したので備忘録として書いておきます.
環境的には WindowsXP, cygwin です.*nix 上で CVS to SVN な話は結構見つかるんですが Windows 環境での話が少なくて本当に困った.

Subversion のインストール

さてまずは Subversion のインストールだけど,公式サイトから 1.1.3 をダウンロード&インストール.
下記サイトを参考にさせていただきました.

http://sonic64.hp.infoseek.co.jp/2005-03-01.html

TortoiseSVN のインストール

Windowsエクスプローラ(というかシェル)を拡張して SubversionGUI から使えるようにするツール TortoiseSVN をインストールしました.

やはり上記サイトが詳しいです.

いろいろいじる

最初,何も考えずに(CVS と同じ気持ちで)単一のレポジトリに対して全部のプロジェクトを詰め込もうとしました.んが,リビジョンがリポジトリ単位でシーケンシャルに付くことから,プロジェクトに関係なくリビジョンがどんどん上がってしまって気持ち悪いのなんの.
というわけで,


e:/svnroot/
- hcom
- PSS
- tkf
- bPSS
のような配置にし,各ディレクトリにリポジトリを配置することにした.さらに各ディレクトリの下に trunk とか branch とかを置くわけですね.
公式ガイドでも推奨されています.

cvs2svn

さて,基本が分かったところで CVS レポジトリを SVN レポジトリに変換する方法を探してみました.一瞬「え,ないの?」と思ったけど cvs2svn というものを見つけました.

最初に見つけたのは下記サイト
http://fuga.jp/~densuke/hiki/hiki.cgi?subversion

Python のインストール

びっくりしたのは Python で実装されているということです.今まで避けてきた Python です.名前からして怖そうとか思ってました(パイソン≠バイソン!).
ここはもう避けて通れないので,まずは cygwinPython をインストールしてみました.が,結果的にこれは失敗でした.具体的なエラーメッセージは覚えていませんが何かのエラーで止まってしまいます.日本語関連だったろうか.

というわけで気を取り直して 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 版 Pythoncygwin から簡単に使えるように,こちらもパスに追加しました.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年ですか.