読者です 読者をやめる 読者になる 読者になる

Mercurial/SubversioinレポジトリをGitレポジトリに変換する

Subversion Git Mercurial

Gitへの移行キャンペーンを実施中なので下記の記事で紹介されているfast-exportを使って、Mercurial/SubversionレポジトリをGitレポジトリに変換している。

fast-exportの取得方法は、

$ git clone git://repo.or.cz/fast-export.git

MercurialレポジトリからGitへの変換方法は、

$ mkdir newgitrepo
$ cd newgitrepo
$ git init
$ hg-fast-export.sh -r PATH_TO_HG_REPO
$ git remote add origin gitosis@gitosis.example.com:newgitrepo.git
$ git push origin master

なので簡単。

SubversionレポジトリからGitへの変換は、fast-exportのコンパイル方法が分からなくて最初戸惑った。CentOSならばapr-devel, apr-util-devel, subversion-develなどをインストールした上で、

$ git clone git://repo.or.cz/fast-export.git
$ cd fast-export
$ export SVN=/usr
$ export APR_INCLUDES=/usr/include/apr-1
$ export CFLAGS='`/usr/bin/apr-1-config --cppflags --cflags`'
$ make

ポイントはCFLAGSにapr-1-configの値を設定すること。そうでないと、

/usr/include/subversion-1/svn_io.h:1499: error: expected declaration specifiers or ‘...’ before ‘apr_off_t’

のようなエラーでビルドに失敗する。ここここを読んで解決した。

あとは、

$ mkdir newgitrepo
$ cd newgitrepo
$ git init
$ svn-fast-export.py /path/to/svn/repository | git fast-import
$ git remote add origin gitosis@gitosis.example.com:newgitrepo.git
$ git push origin master

のようにして変換する。

モジュールを分割してGitレポジトリへ変換したいといったもっと複雑な要件があれば、iteman氏の紹介しているやり方になると思う。