git-svnの使い方がなんとなくわかってきた

中央リポジトリがSubverionの場合にもGitの恩恵を受けたいっていうときはgit-svnがいい
ローカルでの管理はGitで行い、最終的にsvn側にそれを反映するみたいなイメージになる

インストール方法

MacOS X

sudo port install git-core +svn

CentOS

sudo yum -y install git-svn

Ubuntu

sudo aptitude install git-svn

簡単な使い方説明

チェックアウト
# -sをつけるとデフォルトレイアウト(trunk,branches,tagsでsvnリポジトリ設定してあると-sつければオッケー)
git svn clone -s http://repos repos

masterブランチがsvn側のtrunkとひもづいていることを確認

git svn info
開発

トピックブランチを切って作業してmasterにmergeしてsvnに反映する方法がいいみたい

# ブランチを切ってチェックアウト
git checkout -b new_branch

# ブランチ確認
git branches

# 修正とか
git add .
git commit -m "hoge"

# masterブランチをチェックアウト
git checkout master

# トピックブランチをマージ(no-commitつけるとmasterブランチでコミットされずにローカルの変更だけになる)
git merge --no-ff --no-commit new_branch

git add .
git commit -m "hoge"

# git stでnot stageなファイルがある状態でdcommitする
# Cannot dcommit with a dirty index.  Commit your changes first, or stash them with `git stash'.
# svnへのコミットするにはgitのリポジトリがクリーンな状態じゃないとできないので一旦退避
git stash

# branchesとかtagも含めて更新を取り込むよ
git svn fetch

# svn updateをやるのと同じこと更新を取り込む
git svn rebase

# svnの方にコミットするよ
git svn dcommit 

# stashしたのをもとに戻す
git stash pop

# stashが複数あるときはちょっとちがう
git stash list
# stash@{0}
# stash@{1}
# stash@{2}

# 1を取り出す 
git stash pop stash@{1}

# stash listからは削除しないで取り出す
git stash apply stash@{1}