git-svnでSubversionリポジトリとGitリポジトリをブリッジする

Subversionを使うのが本当に辛くなってきたのでgit-svnを使ってみることにした。

clone / git svn clone

去年の後半頃にも使おうとしたのだけどSubversionリポジトリのチェンジセットが200,000近くあって、テキトーに検索して出てきたgit-svnの使い方が書いてあるページのclone方法では時間がかかりすぎるので諦めていた。

そんなことをツイートしたらHEADだけ取得してくるcloneの方法を教えてもらった。

これで200,000リビジョンあっても現実的な時間でcloneできた。

cloneはできたのだけど、どういう風に扱えば良いのかわからなかったのでGit公式のドキュメントであるGitとその他のシステムの連携 - Git と Subversionを読むことに。

読んだ感じでは、普通にGitリポジトリとして扱ってコミットグラフが直線になるように気を使ってあとはpushするだけのようだ。最終的に直線になればいいのでブランチも切り放題である。

pull / git svn rebase

変更の取得とrebaseをするにはgit svn rebaseを実行する。Subversionから変更点を取り込んで、自分の作った変更点をrebaseしてくれる。

pushする直前に必ず実行している。ファイルを変更してコミットもしていない状態だと失敗するので、git stash saveでファイルを退避してから実行していたりする。

push / git svn dcommit

変更を適用するにはgit svn dcommitを実行する。Gitリポジトリ上での変更点をSubversionリポジトリに適用してcommitしてくれる。


git-svnを使う上でこれくらいしか覚えなかったのだけど、Subversionリポジトリが壊れたりということは今所ないし自分はGitが使えてとても快適だし、周囲の人たちはこれまでと同様にSubversionを使えていて良い感じ。

本当に良いのはGitに移行できることが一番良いのかもしれないけれど。まあ、それも徐々にやっていっているところなので焦らずにじっくり見守るようにしていたい。