git-svn で branch を扱う

一応、メモ。

branch ごと clone する

SourceForge から kai を取得する例。

$ git svn clone https://kai.svn.sourceforge.net/svnroot/kai -T trunk -b branches -t tags

branch が増えた場合

git svn rebase は、現在の作業 branch を更新するだけなので、下記のようにする。

$ git svn fetch svn

これで、増えた branch を取得できる。末尾の "svn" オプションは、.git/config を参照の事。

branch の操作

まずは、リモート branch の確認

$ git branch -r
  cooldaemon_embed_tcp_server
  takemaru_config_get_list_of_keys
  trunk

ローカルに持ってきつつ、作業 branch を切り替える

$ git checkout -b config_get_list_of_keys takemaru_config_get_list_of_keys
Switched to a new branch "config_get_list_of_keys"

作業 branch が切り替わっているか確認

$ git branch
* config_get_list_of_keys
  embed_tcp_server
  master

この状態で、修正作業を行い、git commit して git svn dcommit すると、takemaru_config_get_list_of_keys branch に commit される。

config_get_list_of_keys を embed_tcp_server に merge してみる。

$ git checkout embed_tcp_server
Switched to branch "embed_tcp_server"

$ git merge config_get_list_of_keys --no-ff
Merge made by recursive.
 src/kai_config.erl        |   18 +++++++++++++-----
 test/kai_config_SUITE.erl |    5 +++++
 2 files changed, 18 insertions(+), 5 deletions(-) 

実作業時の補足

  • これで、常に現在の作業 branch を確認しているので git-branch を使って確認なんてしない。
  • git-branch でローカルに branch を作りまくって作業しているので、どこで git-svn dcommit するとリモートに反映されるか忘れないようにしている

「git svn info --url」で、現在の branch 上で git-svn dcommit した際のコミット先が解る
branch を作ったり、削除するのは、どうするのか?と質問された。私は、リモートリポジトリに対して直接 svn copy や svn delete を実行してます。