SVNからgitへの移行
社内プロジェクトをSVNからGitLab上で管理されているgitリポジトリに移行してみましたのでその手順をまとめてみます。
まずSVNのワーキングディレクトリで下記を実行します。
$ svn log --xml | grep "<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt
最近のMacではgrep -Pオプションがなくなったらしいので、Gitへの移行の手順から若干アレンジしています。そうしたらusers.txtにSVNにコミットしたユーザの一覧ができるので、名前とメールアドレスを設定していきます。
Subversionのユーザ名 = Gitのユーザ名 <メールアドレス>
こんな感じです。GitLabで管理したかったので、自分の知ってる人であるような気がするユーザ名はGitLab上の名前とメールアドレスを一致させました。
次に、ワーキングディレクトリの外に別のディレクトリを作ります。この作業ではSVNから取り直すみたいなのでもうワーキングディレクトリは用済みです。
$ git svn clone --no-metadata -A users.txt -t tags -b branches -T trunk http://hogehoge.jp/svn
こんな感じみたいです。で、ここでエラーがいろいろでます。
Author: ***** not defined in users.txt file の対処法
なぜか知らないけどusers.txtに入っていないみたいです。users.txtに手作業で指摘されたユーザを追加してコマンド再実行でうまくいきました。
Found possible branch point の対処法
gitリポジトリの中の.git/configから
branches = branches/*:refs/remotes/svn/branches/*
tags = tags/*:refs/remotes/svn/tags/*
みたいなのを消して再実行するとうまくいきました(参考)。
あとはブランチとタグをもってくるんですが、Git - Git への移行の通りで特に難なくできたのでこっちを見て下さい。
また、こうするとファイルのタイムスタンプが作業した時刻になってしまうため、 SVNからGitに移行した後にやること - Qiita [キータ] に書いてある方法でコミットしたタイムスタンプに変更できます。