みんながいまだに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
|