4コマでわかるSVNからgitへの移行

Git-Logo-2Color

SVNからgitに移行してみようかなーと思ってネットで見つけた手順をやってみたのだけれど、自分の知識レベルではそれぞれのコマンドが何を意味しているか理解するのに時間がかかったので、この苦しみをあとで理解できるように簡単にまとめてみた。

前準備

gitとgit-svnのインストールを済ませておくこと。

適度なSVNリポジトリがなかったので、昔使っていたGoogle CodeのSVN(http://daipresents.googlecode.com/svn)を変換している。

1コマ目:SVNからGitに変換する

2012_11_12_15_36

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リポジトリを用意する

2012_11_12_15_36 (1)

SVNの構造をgitの構造にマッチさせる必要がある。これは、SVNから変換したリポジトリ(svn2git)を使わず、整理用gitリポジトリ(googlecode)に整理していく。僕の場合、リモートといいながら同じディスクにgitあるやん!という部分で混乱してしまった。

まず、整理用gitリポジトリを作成し初期化。

https://gist.github.com/daipresents/05c7c4667d7e80a280a229b2b33b872c.js?file=gistfile3.txt

3コマ目:リポジトリを整理する

2012_11_12_15_37

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コマ目:整理されたリポジトリをリモートにアップロードする

2012_11_12_15_38

最後に、整理された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に移管するためにやったことまとめです。

すごく勉強になりました。ありがとうございます。