SourceForge.jpのCVSリポジトリをGitに移行する

昨日の続き。 cvs2git を実行するのに必要な条件については昨日の日記を参考にしてください。

cvs2gitコマンドの使い方

  1. 必要なものがあることを確認します。
  2. cvs2git version 2.1 以降を入手します。最新のバージョン、もしくは開発バージョンを使うことをお勧めします。
    • tarball からインストールするには、単に tarball を変換するコンピュータ上のディレクトリに展開します(このディレクトリから直接実行できます。)
    • 現在の trunk のバージョンをチェックアウトするには、Subversion をインストールして次のように実行してください。

      svn co --username=guest --password="" http://cvs2svn.tigris.org/svn/cvs2svn/trunk cvs2svn-trunk
      cd cvs2svn-trunk
      make man    # manpage が必要なら
      make check  # ... オプショナル
      

      テストスーツは "XFAIL" (期待される失敗) というマークがされたテストが含まれていることに注意してください; これらは既知で問題がないと考えられるものです。

  3. 構成を行って変換を実行します。コマンドラインもしくはオプションファイルから行うことができます。
    • コマンドラインオプションは、man page と --help オプションの出力に書かれています。例としては:
      cvs2git \
          --blobfile=cvs2svn-tmp/git-blob.dat \
          --dumpfile=cvs2svn-tmp/git-dump.dat \
          --username=cvs2git \
          /path/to/cvs/repo
      
    • もっとフレキシブルなオプションファイルを使った方法では、オプションファイルを必要とし、次のように実行します。
      cvs2git --options=OPTION-FILE
      

      cvs2svn ソースツリーの cvs2git-eample.options ディレクトリを参照してください; 多くのドキュメントファイルがあります。

      これは git fast-import フォーマットで二つの出力ファイルを作成します。これらのファイル名はオプションファイルもしくはコマンドライン引数で指定します。例えば、これらのファイルは cvs2svn-tmp/git-blob.dat と cvs2svn-tmp/git-dump.dat という名前です。

  4. git リポジトリを初期化します:
    mkdir myproject.git
    cd myproject.git
    git init --bare
    
  5. ダンプファイルを git fast-import コマンドを使って新しい git リポジトリにロードします。
    git fast-import --export-marks=../cvs2svn-tmp/git-marks.dat < ../cvs2svn-tmp/git-blob.dat
    git fast-import --import-marks=../cvs2svn-tmp/git-marks.dat < ../cvs2svn-tmp/git-dump.dat
    

    Linux/Unix ではこれは次のように短くできます:

    cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
    
  6. (オプショナル) 変換した結果を表示します、例えば:
    gitk --all
    
  7. (推奨) ブランチにつけられた不必要なタグを取り除くには、git リポジトリの中から contrib/git-move-refs.py スクリプトを実行します。
  8. この処理の結果は裸(bare)の git リポジトリです (ソースツリーのチェックアウトバージョンを持っていません)。これはサーバに置くリポジトリのタイプです。プロジェクトとして作業するには、裸でない(non-bare)クローンを作ります(チェックアウトソースツリーを含みます):
    cd $HOME
    git clone /path/to/myproject.git
    cd myproject
    

これでファイルを編集してコミットする準備ができました。

ただし、Mac OS X 10.7.3 Lion では tarbal でダウンロードした cvs2svn-2.3.0 の cvs2git では

ERROR: cvs2svn uses the anydbm package, which depends on lower level dbm libraries. Your system has dbm, with which cvs2svn is known to have problems. To use cvs2svn, you must install a Python dbm library other than dumbdbm or dbm. See http://python.org/doc/current/lib/module-anydbm.html for more information.
というエラーになってしまった。

最初はこれを、Python に AnyDbm モジュールがインストールしていないせいだと勘違いしてしまった。 それで github から AnyDbm をダウンロードしたら、 GHC とか MissingH がないといわれて MacPorts でインストールしたりした。 でもどうやらこれらのモジュールとかが Haskell で使うものらしいということに気づいて、 Python のライブラリ /usr/lib/python-2.7 をのぞいてみたら anydbm.py はちゃんと存在していた。 それもそのはず、 エラーメッセージをよくよく読んでみると、 cvs2svn は anydbm パッケージを使っているけれどもシステムにインストールされた dbm では問題があって、 dumbdbm もしくは dbm 以外のライブラリをインストールしろということらしい。 しかしその方法がわからなかったので、 とりあえず cvs2gitSubversion リポジトリから取り出すことにした。 そうしたら今度は問題なく実行することができた。

実際の SourceForge.jpCVS リポジトリから Git へ移行する手順については http://on-o.com/page/diary/201008.html を参考にした。