SubversionのリポジトリからGitに移行する


Subversionリポジトリhttp://hogehoge.jp/svn とする

コミットしたユーザー名を取得

Git:8.2 Gitとその他のシステムの連携 - Git への移行より、users.txtにSubversionリポジトリでコミットしたユーザ一覧を書き出す。ローカルのSubversionで管理しているディレクトリにて以下のコマンドを実行する。

% svn log --xml | grep -P "^<author" | sort -u |  perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt

users.txt の中身は以下のようになっている。これをGitのユーザ名と対応付ける必要がある。

Subversionのユーザ名 = 

これを以下のようにする。

Subversionのユーザ名 = Gitのユーザ名 <メールアドレス> 

これをちゃんとやっておかないとローカルへの吐き出しに失敗する。

git-svnのインストール

% sudo aptitude install git-svn

ローカルへの吐き出し

Subversionは通例にしたがい、trunk, branches, tags という構成であるとする。このとき、以下のコマンドでローカルにクローンを作る。

% mkdir gittemp
% cd gittemp
% git svn clone --no-metadata -A users.txt -t tags -b branches -T trunk http://hogehoge.jp/svn
or
% git svn clone --no-metadata -A users.txt -s http://hogehoge.jp/svn
〜中略〜
Checked out HEAD:
  http://hogehoge.jp/svn rXXX
% cd svn
% git branch -a

gitのブランチ化

以下のようにgitに変換されたとする。

% git branch -a
* master
  remotes/branch_dir1
  remotes/branch_dir2
  remotes/tags/tag1
  remotes/tags/tag2
  remotes/tags/tag3
  remotes/trunk

”remotes/***"以下に拡張されたbranchesやtags以下のディレクトリをgitのブランチにする。

% git checkout -b NewBranchName REMOTES/HOGEHOGE

remotes/branch_dir1をgitのブランチにするとき
% git checkout -b branch_dir1 remotes/branch_dir1
% git branch

リモートリポジトリへのpush

servername.hoge.jpの/path/to/repos.gitにリモートリポジトリがあるとき、以下のようにしてローカルリポジトリのブランチを反映させる。

% git remote add origin ssh://username@/servername.hoge.jp/path/to/repos.git
(サーバ名の後ろは絶対パスで指定すること)
% git push origin master

上の例で作ったbranch_dir1をリモートリポジトリに追加する場合

% git push origin branch_dir1

関連エントリー