🔄

SubversionからGitへ移行したときの手順まとめ

に公開

SubversionからGitへの移行手順まとめ

SubversionからGitへの移行は一度限りの作業であることが多く忘れがちですが、トラブルも多い作業です。本記事では、実際のプロジェクトで行ったSubversion→Git移行の手順をまとめています。

移行の全体フロー

authors.txtの作成

git svnを使うには、Subversion上のユーザ名とGitのユーザ情報を対応させる必要があります。

john = john <john@example.com>
adam = adam <adam@example.com>

このように記述した authors.txt を準備します。

GitHubに空のレポジトリを作成

あらかじめGitHubで新しいリポジトリを作成しておきます(名前はSVNと同じでもOK)
空の状態にしておきます(READMEや.gitignoreは追加しない)

git-svnで変換クローン

サーバ上のリポジトリの場合

git svn clone -A authors.txt -s file:///var/svn/repos/<svnリポジトリ名> <gitリポジトリ名>

HTTP経由のSVNの場合

git svn clone -A authors.txt -s http://svn.example.com/svn/<repo> <git-repo>

GitHubへpush

変換が完了したらGitHubにプッシュします:

cd <git-repo>
git remote add origin git@github.com:<user>/<repo>.git
git push -u origin master

よくあるトラブルと対処法

巨大ファイルがpushできない

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch <ファイルパス>" \
  --prune-empty --tag-name-filter cat -- --all

authors.txt に未定義ユーザがいる

ログに Author not defined in authors.txt が出たら、そのユーザを authors.txt に追記してください。

unknown_user = unknown_user <unknown@example.com>

pushがエラーで止まる(pack exceeds)

GitHubのpack制限に引っかかることがあります。以下のように小分けでpushします:

git push -u origin HEAD~1000:refs/heads/master
git push -u origin master

SSH接続のホスト認証が必要

echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
chmod 600 ~/.ssh/config

ssh-agentが起動していない

eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

参考リンク

SubversionのリポジトリをGitリポジトリに移行する
25GBの巨大リポジトリをSVNからGitHubへ移行した話

ファースト・スクラッチTech Blog

Discussion