2012年6月8日金曜日

SVNリポジトリをGitに移行して中央リポジトリとして使う

現在関わっているプロジェクトでバージョン管理システムを Subversion から Git に移行したのでその時の手順をまとめてみました。

Subversion を移行する Git リポジトリは中央リポジトリとしてSSH経由でアクセスするものとし、develpoers グループに所属するユーザにアクセスを許可することにします。

また、Subversion との併用ではなく、Subversion リポジトリは残すものの基本的には Git メインで使っていくことを想定しています。

まず、Git リポジトリ用のディレクトリを作成します。
# mkdir /var/git
# cd /var/git
# mkdir repos-name.git
Git リポジトリを初期化する前に、 ディレクトリの所有者を共有用グループに変更し、グループ書き込み権限を与えます。
# chown root:developers repos-name.git
オプションに --bare と --shared=group を指定して Git リポジトリを初期化します。
# cd repos-name.git# git init --bare --shared=group
ここで作るリポジトリは中央リポジトリとして使うので、作業ファイルは不要なため --bare オプションを指定しています。また、 --shared=group オプションを指定すると、 グループでの共有に適した権限を付与してくれます。(グループ書き込み権限やディレクトリのsetgidなど。)

データを実際に移行する前に、設定ファイルを編集します。先ほどの初期化コマンドでディレクトリ内に config という名前で設定ファイルが生成されています。
# vi config

[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 1
[receive]
denyNonFastforwards = true
[svn-remote "svn"]
url = http://example.com/svn/repos-name
fetch = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*
追加したのは赤字で示した部分です。

さらに、コミット履歴のユーザ情報を名前+メールアドレスに変換するためのファイルを用意します。
# vi ../users.txt

username = Mail Address <mail.address@example.com>
nanashi = Gonbe Nanashi <gonbe.nanashi@example.com>
ここまでできたら、あとは Subversion リポジトリからデータを取得して完了です。
# git --bare svn fetch -A ../users.txt
これでコミット履歴も含めて Git リポジトリにデータを引き継ぐことができます。


参考にしたサイト
http://blog.practical-scheme.net/shiro?20110226-sourceforge-git-migration
http://jarp.does.notwork.org/diary/200902b.html#20090213

0 件のコメント:

コメントを投稿