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での変更が無くても同様のエラーが出る様子.
原理を分かっていないとだめだねー.と反省.