+1  A: 

Without having a pure SVN answer, I would like to refer to the SO question "How to fool git-svn to recognize merges made with svn?"

I recommended doing those git merges in a special branch, but a simpler solution would be to record (at least the most recent) SVN merges in the git-svn cloned repo with git grafts file, in order to transform:

  o-...-A---o---D--- unstable
 /       
X-----B---M---o---o--- stable

into:

  o-...-A---o---D--- unstable
 /       \ 
X-----B---M---o---o--- stable

, easing the git merge process, before dcommit and sending that back to SVN.

VonC
The grafts file seems to help a lot, thanks! It seems to be sufficient to add a graft for just the last merge from trunk. Is that right? Do you recommend using `git merge --squash` to hide the true DAG from SVN? Also, I wonder how well this satisfies #3 (though honestly I'm not sure how valuable having the mergeinfo is to SVN)?
Chris Conway
@Chris: after reading http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-and-rebase, I don't think a `merge squash` is necessary here. SVN can use the DAG to record some `mergeinfo` metadata during `dcommit`.
VonC