git : 「unable to determine upstream svn information from head history. perhaps the repository is empty」

今日のはまった。

git svn でやってきてた trunk ブランチにワークブランチから merge して、Egit経由の commit -amend でコメント直してコミットログを整えていって、を繰り返し。
さて git svn dcommit 。とすると。

unable to determine upstream svn information from head history. perhaps the repository is empty

('A`)ah...


ググったり「git-core でエラーっす」ってメッセージから調べると、 git svn 〜 は git rev-list --first-parent --pretty=medium の出力をもとに、svn リポジトリをトラックしているらしく、各コミットの first-parent が svn に commit されたコミットを指していないと動かない模様。

Egit で git commit --amend 相当の操作をすると、 parent の順序が入れ替わることがあるので、それをトラックできなくなってた模様。

なので、再度 Egit で git commit --amend をやってやると、再び順序が入れ替わり dcommit できるようになりましたとさ。

コマンドらいんからの git commit --amend では、この親コミットの順序入れ替わりはでないので、 Egit 使ったとき限定の特殊例なのかもしれない。

「unable to determine upstream 〜」のエラーは別の理由でも出る場合はあるようなので、原因の一例として参考まで。

参考: git/libexec/git-core の sub working_head_info