2012-11-21T23:14:48+09:00
Subversion のレポジトリの一部を git レポジトリに移行する。
追記(2015-08-20) : ここに書いてあることを参考にせず、こちらを見てください。
表題の件、大変苦労したので記録しておく。
単純に、Subversion のレポジトリ全部を git に移行するには、多くのサイトで解説されているように git-svn を使えばいい。例えば、こんな感じ。
git svn clone -s -A authors.txt file:///path/to/svnrepos gitrepos
ちなみに、authors.txt は、Subversion のコミッター名と git の author の対応が書かれている。ちなみに、僕の場合は、こんな感じ。
tkurita = Tetsuro Kurita <xxxx@mac.com>
(no author) = Tetsuro Kurita <xxxx@mac.com>
さて、自分は、一つの Subversion レポジトリで複数のプロジェクトを管理している。一つのレポジトリに複数のプロジェクトを突っ込んじゃうのは、どうかと思ったけど、集中型VCS では、なぜかそうすることが推奨されているようだ。
レポジトリ内の directory のレイアウトは、Subversion のドキュメントで推奨されているように、次のようになっている。
git の様な分散型では、レポジトリをできるだけ細かい単位で持つのが推奨されるようだ。だから、project1 だけを取り出して git レポジトリとしたい。
試しに、次のようにレポジトリの URL にサブパスを付け加えて、git-svn を実行してみる。
git svn clone -s -A authors.txt file:///path/to/svnrepos/project1 project1
これは、project1 なんてパスは無いぜ、という趣旨のエラーが起きる。git-svn では、レポジトリの一部を取り出すことはできないのか?
仕方が無いので、project1 だけを含む Subversion レポジトリを作って、それを git-svn で git レポジトリに移行するという手順を踏んだ。
svnadmin dump /path/to/svnrepos > svnrep.dump
svndumpfilter include --drop-empty-revs --renumber-revs project1 > project1.dump < svnrep.dump
svnadmin create project1-repos
svnadmin load project1-repos < project1.dump
git svn clone -s -A ./authors.txt -T project1 file:///path/to/project1-repos project1
これでうまくいった。