ocaml-merge3 + monopam pull conflict resolution
Add ocaml-merge3 (Myers O(ND) diff + diff3 line merge with Irmin-style
combinators), wire it into ocaml-git via Git.Subtree.merge, and surface
real conflict markers through monopam pull. Pull conflicts now exit 4
with a hint pointing the user at git add/commit; the previous
theirs-overwrite is gone.
The merge base for Subtree.merge is found by intersecting subtree tree
hashes between mono HEAD and the incoming upstream commit, consulting
the persistent Subtree.Cache for O(1) tree lookups. No commit-message
metadata required — unlike upstream git subtree's git-subtree-mainline
pointer, this is purely tree-driven.
ocaml-merge3 carries 30 differential tests against git merge-file
covering trivial / non-overlapping / conflict / edge / realistic /
random-seeded cases, plus a memtrace-instrumented benchmark in
ocaml-merge3/bench/. The Myers implementation stores only the active
V-array slice at each step (O(D^2) trace memory) and feeds chunks
through a streaming accumulator instead of an O(N^2) coalesce: 5000
lines with 5 edits/side merge in ~1ms (900 merges/s).