Weave: Merging based on language structure and not lines

(ataraxy-labs.github.io)

20 points | by rohanat 3 hours ago

7 comments

  • BrandiATMuhkuh 17 minutes ago
    Pretty cool. I always thought merges should happen by comparing the AST and not lines
  • csomar 4 minutes ago
    I'm working on an online diff tool (https://codeinput.com/products/merge-conflicts) and recently added a mergiraf integration. Basically, the tool loads your git merge but uses mergiraf as the resolution driver. Then add these auto-resolved files to the editor instead of auto-resolving directly.

    I also tried out weave, but apart from TypeScript, I haven't found any cases where it actually outperforms mergiraf (I run a bot that watches for new merge conflicts on GitHub, so I've got a steady stream of conflicts to test against).

    I reached out a couple months ago on Reddit, but I don't think we ever landed on a time to talk. Would be interested to re-connect again.

  • willrshansen 1 hour ago
    First image I see should be a difference of how the merges work.
  • psYchotic 57 minutes ago
    Without having looked into how Weave works, it sounds similar to Mergiraf: https://mergiraf.org/
  • satvikpendem 1 hour ago
    How does it compare to SemanticDiff extension?
  • basurayshreyan 3 hours ago
    how does it fare on organisation repos ? Its quite tricky to make it work on org plans where git based merge goes through a lot of code scannings and stuffs i guess. Curious to know about that
    • rohanat 3 hours ago
      Good question. Weave is a standard git merge driver, so it slots into the existing flow rather than replacing it. You wire it up in .gitattributes, and it only changes the 3-way conflict-resolution step that git already runs. The output is a normal merged tree, so everything an org layers on top still runs unchanged: branch protection, required status checks, code scanning, CI. It isn't bypassing any of that. It just resolves conflicts by entity structure (functions, classes, methods) instead of line hunks, then hands a regular file back to git.
  • franticgecko3 7 minutes ago
    [dead]