Edited at

SVNからgitへの移行

More than 5 years have passed since last update.


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 [キータ] に書いてある方法でコミットしたタイムスタンプに変更できます。


参考文献