🔄
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へ移行した話
Discussion