I wrote, and maintain, an open-source tool called reposurgeon that edits version-control repository histories and can be used to move project histories between VCSes. Recently I shipped full support for reading Subversion dump files and repos. But there is one thing reposurgeon doesn't do very well yet, and that is translate Subversion branch merges done by copying to git-style DAG merges.
In order to get this part right, I need to understand the semantics of merge commits in a git fast-import stream much better than I do. My questions are about which version of content is supposed to be visible after a merge commit.
Of course, file modifications attached the merge commit make their content visible there. My questions are about paths not touched by the commit.
If a path only has content on only one commit chain ancestral to the merge, I assume that content is supposed to be visible. Is that correct?
If a path has content in more than one commit chain ancestral to the merge, which version will be visible?
If a file is deleted along some paths to the merge, what rule predicts when it will be deleted in the merge revision?