git-svn pushできず?

git-svn でpushがどうにもうまく行かなかったけど,なんとか解決できたのでメモ.
# なぜ?はまだこれから究明 :-)

>>>>> 前提

Subversionで管理しているリポジトリからgit-svn

$ git svn clone svn://domain/path/to/repos ./local_dirname

と取得して(仮にsite_A),

$ git clone --bare ./localdirname ~/Dropbox/repos.base

のようにワーキングコピーなしのcloneを作って(仮にsite_B),Dropboxに仕込んでいる状況.

別な作業場所でリポジトリを取得してDropboxにpushしておく.

$ git clone ~/Dropbox/repos.base ./another_works && cd another_works
...edit
$ git push

<<<<<< 前提ここまで

ここからが問題.

site_Aに戻ってきてsite_Bから差分取得し,あわせてsvnリポジトリからも差分取得(git svn rebase).
マージ作業も終わった所で,site_Aからsite_Bにpushしようとするとrejectされる.

! [rejected]        master -> master (non-fast forward)

不思議だなーと思ってタイムラインをみてみると,svnから取得したリビジョンはsite_Cの作業より前のリビジョン扱いになっている.

時間軸は以下のような流れだけど,リビジョンはsvnとsite_Cが逆転している.

時間軸    :----| site_A |---| site_C |---| svn rebase |---
リビジョン:----| site_A |---| svn rebase |---| site_C |---

どうしたもんかと,試行錯誤してみたところ,

  • site_A でもう一度site_Bからpull
  • site_A からsite_Bへpush

としたらなんとかpushすることができた.

リビジョンのフォーク状況は下のような形.svn rebaseとsite_Cが並列している扱いになるらしい.

----| site_A |-+-| svn rebase |-+-| site_C |---
               |----------------|

どうやらsvn rebaseをすると,site_Bでの変更が無くても同様のエラーが出る様子.
原理を分かっていないとだめだねー.と反省.