SVNからgitに移行してみようかなーと思ってネットで見つけた手順をやってみたのだけれど、自分の知識レベルではそれぞれのコマンドが何を意味しているか理解するのに時間がかかったので、この苦しみをあとで理解できるように簡単にまとめてみた。
前準備
gitとgit-svnのインストールを済ませておくこと。
適度なSVNリポジトリがなかったので、昔使っていたGoogle CodeのSVN(http://daipresents.googlecode.com/svn)を変換している。
1コマ目:SVNからGitに変換する
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile1.txt
SVNからgitに変換する。変換したgitリポジトリをsvn2gitとかいう名前にしている。途中でコケた時にリジュームできるようにfetchを使って変換する。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile2.txt
2コマ目:整理するgitリポジトリを用意する
SVNの構造をgitの構造にマッチさせる必要がある。これは、SVNから変換したリポジトリ(svn2git)を使わず、整理用gitリポジトリ(googlecode)に整理していく。僕の場合、リモートといいながら同じディスクにgitあるやん!という部分で混乱してしまった。
まず、整理用gitリポジトリを作成し初期化。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile3.txt
3コマ目:リポジトリを整理する
SVNから変換したリポジトリ(svn2git)に移動して、整理用リポジトリ(googlecode)に整理していく。
まず、originにgitリポジトリを割り当てる。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile4.txt
local-trunkを作成してそこにSVNのtrunkを指すようにする。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile5.txt
local-trunkを整理用リポジトリのmasterとして移行。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile6.txt
一回、ブランチとリモートブランチを確認しておく。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile7.txt
ブランチは「python-test-branch」のように確認できた。タグは「tags/redmine_all_time_team-0.2.0」のようになっているので、それぞれを整理用リポジトリに移行していく。まずはブランチの移行。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile8.txt
これをブランチの数だけ繰り返す。
以下のコマンドでリモートにブランチが追加されているのがわかる。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile9.txt
次にタグの移行。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile10.txt
こちらもタグの数だけ繰り返す。
「git tag
」コマンドでタグを確認できる。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile11.txt
4コマ目:整理されたリポジトリをリモートにアップロードする
最後に、整理されたgitリポジトリをリモート(Githubとか)にアップロードする。
一度、整理されたリポジトリに移動して、ブランチとタグの様子を見てみよう。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile12.txt
今回はテストのため一部ブランチとタグのみ移行した。
確認できたらリモートにアップロードする。
https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile13.txt
まとめ
もしかしたら「もっと簡単にできるよ!」とかあるかもしれないので、リブログされたら修正しようかと思う。
参考にさせていただいたのは、会社名が素敵すぎるメッサリバティさんのsvn の repository を git の repository に変換する方法 | messaliberty – 株式会社メッサリバティと、説明がとても秀逸なDQNEO起業日記さんの仕事で使ってる巨大SVNレポジトリをGithubに移管するためにやったことまとめです。
すごく勉強になりました。ありがとうございます。