昨日作った tdiary の git リポジトリで加えた変更を sf.net の svn リポジトリに反映させようと思ったんだけど、これがまた一筋縄には行かなかった。
何かぐぐる先生の検索結果では、git svn init (clone) したリポジトリなら dcommit で svn 側に反映できるということが書いてあったんだけど、どうにも自分の環境でやってみるとうまくいかない。以下、やってみたこと。
リモートの trunk を指定して branch 作成、切り替えてから master からマージ、dcommit。typester さんの fast-forward mergeによるとデフォルト設定の merge では dcommit で面白くない動作になるみたいなので --no-ff をつけて実行してみる
git br -b svn/trunk trunk git co svn/trunk git merge --no-ff master git svn dcommit
とやってみると変更点が発生していないだか、svnの情報が取れないとか言われる
Unable to determine upstream SVN information from HEAD history.
Using Git with SVNによると、.git/config の svn-remote に設定を追加しないと駄目とか書いてあったので、確認してみると svn init で自動設定されたものは確かにある。
ここで一度 svn init したもので dcommit するのはあきらめて、pure git なリポジトリに svn-remote を追加する方法で dcommit する方法を試してみた。
git clone git@github.com:hsbt/tdiary.git
.git/config に以下のエントリを追加
[svn-remote "sourceforge/trunk"] url = http://tdiary.svn.sourceforge.net/svnroot/tdiary/trunk fetch = :refs/remotes/sourceforge/trunk
この後に fetch して ブランチを作成。後は svn init した時と同じように作業する
git svn fetch sourceforge/trunk git br -b svn/trunk remotes/sourceforge/trunk git co svn/trunk git merge --no-ff master git svn dcommit
これで sf.net 側にコミットすることができた。
うーん、wassr だと svn init したところから dcommit できたという報告もあるので、何かが違うのかなあ。gitこわい。
dcommit するまで、勘違いしていたんだけど svn 側にコミットログとして使われるのは master で commit した時のログではなくて、svn/trunk に commit した時のログだけなんだね。なので、単純 merge だと sf.net 側には Merge from 〜というログばかりが残ってしまってイマイチな感じ。
この辺は --no-commit オプションを使って、回避できるみたい
git merge --no-ff --no-commit master git commit -a -m "changelog" git svn dcommit
ただ、毎回指定するのはだるくてしょうがないので .git/config に以下のエントリを追加してデフォルトのオプションを変更しておく
[branch "svn/trunk"] mergeoptions = --no-ff --no-commit
しばらくはこの方法で github をメインにしてやってみるつもり。
毛を刈ったあとのアルパカの画像を見て、えこりん村リベンジを決行するか考えたり何だり。本日のメニュー
レタスの豚肉巻きはクックパッドの1位になっていた料理だけど、かなり美味しかった。ごちそうさまー。