argius note

プログラミング関連

CVSからSubversionへの移行

実験的に、1つのプロジェクト(Calendar)だけCVSからSubversion(以下SVN)へ移行してみました。環境はWinXP+Cygwin

SVN本体のインストール

http://subversion.tigris.org/
から1.4.5をダウンロードしてデフォルトのままインストール。環境変数PATHに"(インストール先DIR)\bin"を設定。

リポジトリの作成

リポジトリのディレクトリは、CVSが"%CYGWIN_ROOT%/var/cvs"、SVNが"%CYGWIN_ROOT%/var/svn"。
但し、今回はcvs2svnで生成するのでこの手順はスキップ

$ cd /var
$ mkdir svn
$ svnadmin create svn

リポジトリの変換

今回は全部ではなく、1つのモジュールだけにします。
変換ツールは、定番のcvs2svn。Pythonが必要。
http://cvs2svn.tigris.org/
上記ページの2.1.1をダウンロード。pythonは既にインストール済なので、解凍して適当なディレクトリに配置したら、インストールディレクトリの"cvs2svn"というファイルにパスが通るようにする。絶対指定でも多分OK。今回は一時的にCygwin環境変数に追加しました。
オプションの意味は先頭から順に、エンコーディング、テキストファイルの改行コード?、trunkの明示、変換先SVNリポジトリのroot、変換元CVSリポジトリのroot。*1
trunkの明示は、リポジトリタイプを"single"にした時と同じ状態にするための指定(次項で説明)。これに関連して、リポジトリはCalendarモジュール専用になるようにします。
あと、変換対象はCalendarだけなんだけど、CVSROOTが無いと怒られるので一緒にコピー。CVSROOTモジュールができてしまいますが、後で消せば良いでしょう。

$ export PATH=$PATH:/opt/cvs2svn/
$ mkdir /tmp/repos_Calendar
$ cp -pR /var/cvs/Calendar/* /tmp/repos_Calendar/
$ cp -pR /var/cvs/CVSROOT/ /tmp/repos_Calendar/
$ cvs2svn --encoding=SHIFT_JIS --default-eol=CRLF \
> --trunk=Calendar/trunk -s svn /tmp/repos_Calendar/

最後にファイル数と実行時間が表示されたらOK。

Eclipseのプロジェクトと同期

SVNのプラグインをインストール。Eclipseは3.3.1。下記URLの説明の通りに最低限の3種類のみインストールした。インストール完了後、Eclipse再起動。
http://eclipsewiki.net/eclipse/index.php?Subversive%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3
プロジェクトを削除してからチェックアウトし直したほうが楽だと思いますが、ここは敢えて消さずにやってみます。
CVSとの同期を切断し、メタ情報も削除。プロジェクトを選択してコンテキストメニューの"team→Share Project"を選択し、"SVN"を選んで進みます。下記URLを参照。
http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn15/eclipseplgn15_1.html
リポジトリのタイプで"single project layout"を選択すると、先ほど変換したtrunkと同期するように設定してくれます。認証のところはuser/passは空のままOKにしてしまいましたが、良いのかな。

まとめ

これで無事、移行させることができました。
検索したところによると、数年前はツールがまだ新しくて移行するのは敷居が高かったようです。今回は単純なパターンだったからか、リポジトリタイプのところなどちょっと悩んだものの、予想したよりすんなりと出来ました。

追記:cvs2svnでドットファイルの移行が出来てなかったので、調べたけど今のところは良く分かっていません。

*1:絶対パスを使う場合は、Cygwinのマウントは認識されないので、Windowsのパスか"cygpath -w"を使う。