CentOS 5.6 上のリポジトリを Subversion から Git に移行する
svn2git を使って Subversion のリポジトリを Git に移行した時のメモ。
1. git, git-svn をインストール
git をインストールするのはもちろんのこと、 svn2git が内部で使用する「git svn」コマンドを実行するためには git-svn パッケージも必要となる。両方とも yum でインストール可能。
[user@localhost ~]$ sudo yum install git git-svn
2. svn2git をインストール
Subversion から git への移行ツール svn2git をインストール。 svn2git は ruby スクリプトなので gem でインストールする。
[user@localhost ~]$ sudo gem install svn2git [sudo] password for user: sudo: gem: command not found
gem がない……
[user@localhost ~]$ which gem /usr/bin/which: no gem in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin) [user@localhost ~]$ which ruby /usr/bin/which: no ruby in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin)
gem も ruby も入っていませんでした(´Д`)
3. Ruby + RubyGems をソースからインストール
CentOS 5.6 の yum で ruby をインストールすると 1.8.5 がインストールされ、そのままだと svn2git をインストールすることができない(gem install svn2git が失敗してしまう)。そこでソースから Ruby および RubyGems をインストールする。yum でインストール済の場合は yum erase で ruby を一旦アンインストールする。
3-1. Ruby のインストール
とりあえず make まで
[user@localhost ~]$ cd /usr/local/src [user@localhost src]$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p358.tar.gz [user@localhost src]$ tar xzf ruby-1.8.7-p358.tar.gz [user@localhost src]$ cd ruby-1.8.7-p358 [user@localhost ruby-1.8.7-p358]$ ./configure --prefix=/usr/local [user@localhost ruby-1.8.7-p358]$ make
通常のインストール手順
[user@localhost ruby-1.8.7-p358]$ sudo make install
checkinstall を使う場合のインストール手順
[user@localhost ruby-1.8.7-p358]$ sudo checkinstall --fstrans=no [user@localhost ruby-1.8.7-p358]$ rpm -ivh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p358-1.x86_64.rpm
確認
[user@localhost ~]$ which ruby /usr/local/bin/ruby [user@localhost ~]$ ruby --version ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
3-2. RubyGems のインストール
[user@localhost ~]$ cd /usr/local/src [user@localhost src]$ wget http://rubyforge.org/frs/download.php/76011/rubygems-1.8.22.tgz [user@localhost src]$ tar xvzf rubygems-1.8.22.tgz [user@localhost src]$ cd rubygems-1.8.22 [user@localhost rubygems-1.8.22]$ sudo ruby setup.rb
確認
[user@localhost ~]$ which gem /usr/local/bin/gem [user@localhost ~]$ gem --version 1.8.22
4. 今度こそsvn2git をインストール
[user@localhost ~]$ sudo gem install svn2git [sudo] password for user: Fetching: svn2git-2.2.1.gem (100%) Successfully installed svn2git-2.2.1 1 gem installed Installing ri documentation for svn2git-2.2.1... Installing RDoc documentation for svn2git-2.2.1... [user@localhost ~]$ which svn2git /usr/local/bin/svn2git
インストールできた!(´∀`)
5. svn2git を実行する
ポイントは「svn+ssh 経由で実行しない」こと。Subversion のリポジトリに svn+ssh 経由でアクセスすると「Malformed network data ...」とかいうエラーが頻発してまともに変換ができない。そのために今回は CentOS 上に svn2git 環境を構築することでサーバー内で完結できるようにした。
svn2git のコマンドは次のようになる。
svn2git <SVNリポジトリURL> --verbose --authors /path/to/authors
ここで最後に指定している「authors」と呼ばれるファイルは、subversion 上の author 情報を git の author 情報に変換するためのマッピング定義ファイルで、次のような内容であらかじめ作成する。
john = John Smith <john_smith@example.com>
左辺が Subversion 上に記録されている author 名、右辺が git に保存する author名+メールアドレスとなる。Subversion 上に未定義の author が出現するとエラーとなるので、必要な情報を随時追加していってもよい。
というわけで、ローカルの SVNリポジトリをGitリポジトリにインポートするコマンドは次の通り。
[user@localhost ~]$ cd /path/to/git [user@localhost git]$ svn2git file:///path/to/svn --verbose --authors /path/to/authors
上記手順で、 /path/to/git ディレクトリ以下に .git ディレクトリ および作業コピーが生成される。
おつかれさまでした。