git-svn

変更即共有をしたくない場合やひとりで大規模な変更を考えてる場合 ( branch 切って頑張る ) 、 raptop PC なんかで standalone で開発せざるを得ない時間がある場合に有効、というのはもっともらしい利点だけどそれ以上に git の感覚を使いまわせるのがうれしいんじゃないかなと思う。 svn に比べて command 体系が整備されていたり rm や mv をまともにできたりと作業しやすいのは git の方だと思うのでこれは重要。あと git から入ったひとが svn repository をいじれるので夢がひろがりんぐ、というのは community にとってはバカにならないことかもしれない。

で、使ってみることにしたんだけどとりあえず以下の脳内置換を覚えておけばいいのかな。要は remote が関連するところだけ git svn ではじまる command を使えばいい、と。

git git-svn
git clone git svn clone
git pull git svn rebase
git push git svn dcommit

いまいち branch の扱いとかよくわからんのだけど man には branch 管理や merge は git command を使って user がやってね ( ばちこーん ) !! とか書いてあるから普通に git で好き勝手やって master に merge したあと dcommit すりゃいいのかな。

あと pull がなくて rebase だけってのは変更箇所がかぶってた場合、

  1. svn update -> conflict -> merge ( merge に履歴とかないし ) -> commit
  2. git pull -> conflict -> merge ( 履歴が残る ) -> commit
  3. git rebase -> conflict -> merge ( 履歴残らない ) -> commit

ということなわけで、意味的に 1 に近いのは 3 だろうということかな。まぁ 2 のような分散 repository だからこそ生じる状況は svn には処理できないというだけだろうけど。