CVS リポジトリーを Mercurial へ変換 (SJIS コミットログを UTF-8 に変換)

Mercuiral にはリポジトリーを変換する機能があります。
かって CVSNT で作成していたリポジトリーを Mercurial に変換したので記録しておきます。

重要: この作業は Linux で作業した方が圧倒的にトラブルが少ないです。 Windows 環境では CVSNT が邪魔をして コンバート自体がうまく動作しません。

今回は CentOS 6.5 に Mercurial をソースからインストールした環境で作業を行いました。

1. コンバートエクステンションを有効にする

前提としてコンバートエクステンションを有効にしておく必要があります。 .hgrc に

[extensions]
hgext.convert=

を追加して有効にしておきます。

2. hghook-cvslog-transcoder を用意する。

CVS で作成してきたリポジトリーのコミットログは SJIS (cp932) です。mercurial の機能だけでコンバートするとコミットログは SJIS のままなので文字化けしてしまいます。
そこで hghook-cvslog-transcoder を利用します。 ダウンロードと書いてあるリンクからダウンロードできます。ここでは ~/hghook-cvslog-transcoder に展開したとします。

3. CVSリポジトリーを取得する。

CVS リポジトリーをローカルにコピーします。ローカルにコピーした方がトラブルが少ないですし、やり直しも楽です。ここではコピーしたリポジトリーを ~/cvsroot とします。

Windows Server から Linux へのファイルコピーですが、今回は Windows の共有フォルダーにリポジトリーをコピーしてから Linux のファイルブラウザでコピーしました。

4. CVS から変換対象のモジュールをチェックアウトする。

コピーしたCVSリポジトリーから変換対象となるモジュールをチェックアウトします。ここでは module とします。

$ cvs -d ~/cvsroot co module

5. Mercurial にコンバート。

後は変換するだけです。 --config オプションで hghook-cvslog-transcoder を指定します。出力先は module-hg です。

$ hg --config hooks.cvslog=python:~/hghook-cvslog-transcoder/cvslog-transcoder.py:cp932 convert module module-hg


エラーが出なければ終了です。



以前コンバートしたときはログの変換のために一旦 cvs2svn で SVN に変換してから Mercurial に変換していました。それに比べたら hghook-cvslog-transcoder を使った方が全然便利です。







コメント

このブログの人気の投稿

CentOS 6.5 でシリアルポートに接続する方法

バイナリーファイルを C 言語の配列で出力