この記事をシェアする

あなたが知らない git svn の世界

みんながいまだにsvnを使い続けるので、自分だけでもgitを使って幸せになってやる。って人のためのガイド。ツールや環境がsvnでがっちりつくられているとしかたないですねー。という状況の人向け。そこまでしてgitを使うのは早いし柔軟だから。マージもサクッと終わるし。

スポンサーリンク

git svnって?

svnをリモートリポジトリとして、ローカルではgitを扱うためのもの。gitインストールすれば大抵はいってるけど、macportsだったらこんな感じでインストール。

$ sudo port install git-core +svn

gitローカルリポジトリをつくる

gitは分散リポジトリなので、まずはローカルにリポジトリを持つところからスタート。

$ git svn clone -s http://svn.server/path/project

これでsvnリポジトリのcloneをローカルにつくる。これでmasterブランチがsvnのtrunkに割り当てられる。

いわゆる svn update 的なやつ

$ git svn rebase

リモートリポジトリの情報を引っ張ってくる

$ git branch -r

なんて、やってもcloneしてから以降につくられたbranchは見えない。

$ git svn fetch svn

という感じでリモートsvnの情報をローカルリポジトリに取り込もう。そしたら見れるようになる。

開発をはじめる

じゃー、今回の開発はrabbitブランチで開発してね。という風にsvnでブランチをつくられた場合、

$ git svn fetch svn

これで、リモートリポジトリの情報を取り込む。

今回の開発のローカルブランチをつくる

$ git checkout -b local_rabbit rabbit

という感じで、ローカルリポジトリにlocal_rabbitブランチをつくり、リモートsvnのrabbitブランチを上流にする。

あとは通常通り、git addして、git commitするようにgitで開発して、svnのコミットを取り込みたければ、

$ git svn rebase

自分のコミットをリモートsvnリポジトリにいれたければ、

$ git svn dcommit

git svnによってrabbitリポジトリをsvnのtrunkにマージする場合

開発が一通り終了したので、trunkにマージする場合。すでにsvnのrabbitブランチが開発Fixしてるとして、

$ git svn fetch svn
$ git checkout master
$ git merge rabbit --no-commit --no-ff
競合が発生した場合はここで修正
$ git commit -m "merge from rabbit"
$ git svn dcommit

といった流れで、リモートsvnブランチのrabbitをローカルリポジトリのmasterにmergeして、リモートsvnリポジトリにdcommitする。あえて、リモートsvnブランチから取り込むことによって、ローカルでつくったブランチとかを混ぜないで、複雑にしないことがスッキリやるポイントです。

こんな感じでgitをつかって、svn使い続けてる人に布教していきましょう。git rebaseとかの便利さやトピックブランチの活用なんてのを見せたらメロメロですね。

余談

gitはLinuxの開発者リーナス・トーバルズが開発したことで有名であり、Lnuxカーネルの開発に使われています。今のメンテナーは日本人の濱野さん。濱野さんが執筆した下記のGit本は入門と書いてあるけど、全然入門じゃない本格的なすげー便利な本。リーナスはGitは“まぬけ”という意味でらしいですよ。後付けで、Global Information Truckerの略だなんて話もあるらしいですけど。

濱野 純(Junio C Hamano)¥ 2,310

スポンサーリンク

この記事をシェアする

著者をフォローする