git-svnでSubversionリポジトリとGitリポジトリをブリッジする
Subversionを使うのが本当に辛くなってきたのでgit-svnを使ってみることにした。
clone / git svn clone
去年の後半頃にも使おうとしたのだけどSubversionリポジトリのチェンジセットが200,000近くあって、テキトーに検索して出てきたgit-svnの使い方が書いてあるページのclone方法では時間がかかりすぎるので諦めていた。
そんなことをツイートしたらHEADだけ取得してくるcloneの方法を教えてもらった。
@sasaplus1 チェックアウト時に git svn clone -rHEAD (svn-repos-url) ってすれば、HEADのみチェックアウトできるんで、それ以降をgit管理できますよ。
— 白い高野さん (@masaru_b_cl) 2014, 11月 4
@sasaplus1 http://t.co/1OXnItdJhfと同じっぽいですね
— 白い高野さん (@masaru_b_cl) 2014, 11月 4
これで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に移行できることが一番良いのかもしれないけれど。まあ、それも徐々にやっていっているところなので焦らずにじっくり見守るようにしていたい。