So-net無料ブログ作成
VersionControlSystem ブログトップ

cvs2svn [VersionControlSystem]

CVSからsubversionへの移行

■概要

cvs2svnを利用して、cvsからsubversionへの移行にtryします。

■はじめに

cvs2svnは、CVSリポジトリの内容をSubversionのリポジトリに変換する移行ツールです。Pyhtonで記述されていますので、動作させるためにはもちろんPythonが必要となります。私はploneをインストールしているため、ploneに同梱されているバージョン(ver2.3)を利用します。CVSはcygwinのCVSを利用します。

・cvs2svn
http://cvs2svn.tigris.org/

■移行手順

最終的な移行手順を以下に述べます。発生した問題点および解決方法に関しては次節で述べます。

  1. cygwin, subversion, python を実行できるようパスを追加する。
    export PATH=/usr/bin:$PATH:/cygdrive/c/Program\ Files/Subversion/bin/:/cygdrive/c/Program\ Files/Plone\ 2/Python/
  2. $ ./cvs2svn --use-cvs --encoding=Shift_JIS -s D:/subversion_repo D:/CVSROOT

■発生した問題および解決方法

  1. RCSのcoコマンドが使用できない。

    ERROR: The command 'co -q -x,v -p1.1 -kk "d:/CVSROOT/Portal\
    .classpath,v"' failed with exit status: 1
    and the following output:
    'co' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    ソースコードを読んでみると、cvs2svnの内部でRCSの"co"コマンドを使用しているようです。ローカルマシンにはRCSがインストールされていないため動作しません。このため、cygwinのRCSをインストールすることを考えましたが、代替の機能となる --use-cvs オプションを利用できることを確認しましたので、私は --use-cvs オプションを付与して実行しています。

  2. コミット時のコメントの文字化け

    cvs2svn実行時に文字コードの指定を「--encoding」オプションで指定してみましたが、変換されずエラーが発生します。Shift_JIS, EUC-JP, UTF-8等設定して変換してみますが、変換できず、エラーが発生してしまいます。原因はPythonの日本語Codecがインストールされていないことであることが判明しました。以下から、インストールしたPythonのバージョンに適用可能なJapaneseCodecsをインストール後、再実行することにより解決します。

    JapaneseCodecs version 1.4.11
    http://www.python.jp/Zope/download/JapaneseCodecs

  3. リポジトリの保存形式に関して

    subversionでは、リポジトリの保存形式として、Berkeley DB と FSFS リポジトリの2種類があります。どちらの保存形式が望ましいか悩みましたが、最終的にはFSFSリポジトリ形式にすることにしました。cvs2svnはディフォルトでBerkeleyDB形式のリポジトリを作成します。FSFSリポジトリ形式で作成したい場合には、cvs2svnを実行する際に、オプションとして「--fs-type=fsfs」を追加してください。この2種類のリポジトリを比較された記事が以下にありますので、各自の環境を構築する場合に、参考にされてください。

    ・subversionのリポジトリの保存形式
    http://subversion.bluegate.org/doc/ch05.html#svn.reposadmin.basics.backends
    http://arch.bluegate.org/pipermail/subversion-jp/2004-May/000087.html

 


VersionControlSystem ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。