4 puntos por GN⁺ 2024-11-10 | 2 comentarios | Compartir por WhatsApp
  • Una herramienta para resolver conflictos de merge en Git, que entiende el árbol dentro del archivo para conciliar de forma armoniosa las necesidades de ambos lados
  • Permite agregar nuevos lenguajes de forma declarativa
  • Se puede configurar para usar Mergiraf en lugar del algoritmo de merge predeterminado de Git
    • Mejora comandos de Git como merge, revert, rebase y cherrypick
  • O bien, se puede invocar Mergiraf manualmente cuando ocurra un conflicto, manteniendo el comportamiento original de Git.

Objetivos de Mergiraf

  • No ocultar los conflictos
    • Las heurísticas de merge con reconocimiento de sintaxis a veces pueden ser demasiado optimistas y considerar que un conflicto quedó resuelto
    • Mergiraf preserva el mejor estado posible manteniendo marcadores de conflicto en el archivo cuando hay dudas
    • Si resolvió todos los conflictos por sí solo, recomienda revisar el trabajo de mediación con el comando mergiraf review
    • Si el merge parece incorrecto, se puede reportar fácilmente con mergiraf report
  • Lo suficientemente rápido para uso interactivo
    • Una jirafa puede correr a 60 kilómetros por hora
    • El trabajo de fusionar versiones divergentes de un archivo suele ocurrir de forma rutinaria y pasar desapercibido, siempre que no haya conflictos
    • Mergiraf busca ser rápido para no interrumpir tu trabajo
  • Abierto a otros métodos
    • En muchos casos, el merge basado en líneas funciona bien y no requiere manipulación de árboles
    • Si el merge basado en líneas no tiene conflictos, Mergiraf devuelve ese resultado (muy rápido)
    • Si el merge basado en líneas genera claves duplicadas, Mergiraf realiza un poco de trabajo adicional para resolver el problema o resaltarlo con marcadores de conflicto

2 comentarios

 
2147483647 2024-11-11

Vaya, las jirafas pueden correr a 60 kilómetros por hora.

 
GN⁺ 2024-11-10
Comentarios en Hacker News
  • Está haciendo un trabajo similar a SemanticDiff y está teniendo problemas al usar tree-sitter y GumTree

    • tree-sitter fue creado principalmente para resaltado de sintaxis, por lo que es difícil hacer un análisis sintáctico preciso cuando se modifica el código
    • GumTree ofrece resultados rápidos, pero con frecuencia devuelve emparejamientos incorrectos
    • Está cambiando a un enfoque basado en Dijkstra y está obteniendo mejores resultados
  • La sección de arquitectura de Mergiraf explica en profundidad cómo funciona una herramienta compleja

  • La razón para elegir una jirafa es que, gracias a su altura, puede ver a lo lejos y porque tiene el corazón más grande entre los mamíferos terrestres

  • Es crítico con la afirmación de que en algunas inserciones el orden no importa

    • A nivel del lenguaje, el orden puede no importar, pero para los humanos cierto orden sí puede ser importante
    • Como ejemplo, entre Base struct Foo; struct Bar;, Left inserta impl Foo { } y Right inserta struct Baz;, y la computadora no percibe la diferencia
  • Ve con buenos ojos el desarrollo de controladores de fusión para Git

    • La fusión estándar de 3 vías no entiende el lenguaje y puede causar problemas
    • En código Python, si dos ramas distintas eliminan cada una un print diferente, el resultado puede ser código no válido
  • Las herramientas con reconocimiento sintáctico tienen problemas cuando el equipo extiende el lenguaje base para adaptarlo al problema

    • Menciona los macros de Rust y los casos de uso de "go generate"
  • Cree que esta idea podría ayudar a resolver conflictos relacionados con el formateo automático

    • Se pregunta si podría detectar conflictos semánticos causados por movimientos de código
  • Planea probar Mergiraf y ya lo usa junto con git-absorb

    • Sería bueno que ambas herramientas funcionaran perfectamente o que se integraran oficialmente en Git
  • El soporte para Python parece que sería útil

    • El AST basado en indentación de Python parece que funcionaría bien
  • El soporte de lenguajes es limitado, pero espera que se agregue compatibilidad con más lenguajes