4 points par GN⁺ 2024-11-10 | 2 commentaires | Partager sur WhatsApp
  • Un outil pour résoudre les conflits de fusion Git, qui comprend l’arbre d’un fichier afin de concilier harmonieusement les besoins des deux côtés
  • Permet d’ajouter de nouveaux langages de manière déclarative
  • Peut être configuré pour utiliser Mergiraf à la place de l’algorithme de fusion par défaut de Git
    • Améliore des commandes Git comme merge, revert, rebase, cherrypick
  • Il est aussi possible de conserver le comportement d’origine de Git et d’appeler manuellement Mergiraf lorsqu’un conflit survient.

Objectifs de Mergiraf

  • Ne pas masquer les conflits
    • Les heuristiques de fusion sensibles à la syntaxe peuvent parfois considérer de façon trop optimiste qu’un conflit a été résolu
    • En cas de doute, Mergiraf préserve l’état le plus sûr en laissant les marqueurs de conflit dans le fichier
    • Si tous les conflits ont été résolus automatiquement, il recommande de vérifier le travail de médiation avec la commande mergiraf review
    • Si la fusion semble incorrecte, il est facile de le signaler avec mergiraf report
  • Suffisamment rapide pour un usage interactif
    • Une girafe peut courir à 60 kilomètres par heure
    • La fusion des versions divergentes d’un fichier se produit souvent de manière routinière et passe inaperçue tant qu’il n’y a pas de conflit
    • Mergiraf s’efforce d’être rapide afin de ne pas perturber le travail
  • Ouvert à d’autres approches
    • Dans de nombreux cas, la fusion basée sur les lignes fonctionne bien et aucune manipulation d’arbre n’est nécessaire
    • S’il n’y a pas de conflit avec une fusion basée sur les lignes, Mergiraf renvoie ce résultat (très rapidement)
    • Si une fusion basée sur les lignes crée des clés dupliquées, Mergiraf effectue un peu de travail supplémentaire pour résoudre le problème ou le mettre en évidence avec des marqueurs de conflit

2 commentaires

 
2147483647 2024-11-11

Les girafes peuvent courir à 60 kilomètres par heure.

 
GN⁺ 2024-11-10
Avis Hacker News
  • Travaille sur quelque chose de similaire à SemanticDiff et rencontre des problèmes avec l’utilisation de tree-sitter et GumTree

    • tree-sitter est principalement conçu pour la coloration syntaxique, ce qui rend l’analyse syntaxique précise difficile lors de modifications du code
    • GumTree fournit des résultats rapides, mais renvoie souvent des correspondances erronées
    • Un passage à une approche basée sur Dijkstra permet d’obtenir de meilleurs résultats
  • La section architecture de Mergiraf explique en profondeur le fonctionnement d’un outil complexe

  • Le choix de la girafe vient du fait qu’elle peut voir loin grâce à sa taille et qu’elle possède le plus grand cœur parmi les mammifères terrestres

  • Critique l’idée selon laquelle l’ordre n’aurait pas d’importance pour certaines insertions

    • Au niveau du langage, l’ordre peut ne pas être important, mais pour les humains, un ordre précis peut compter
    • Par exemple, si dans Base struct Foo; struct Bar;, Left insère impl Foo { } entre les deux et Right insère struct Baz;, l’ordinateur ne perçoit pas la différence
  • Voit d’un bon œil le développement de merge drivers pour Git

    • La fusion 3-way standard ne comprend pas le langage et peut donc poser problème
    • Dans du code Python, si deux branches différentes suppriment chacune un print différent, on obtient un code invalide
  • Les outils sensibles à la syntaxe rencontrent des difficultés lorsque les équipes étendent le langage de base pour l’adapter à leur problème

    • Mentionne les macros de Rust ou les cas d’usage de "go generate"
  • Idée qui pourrait aider à résoudre les conflits liés au formatage automatique

    • Se demande s’il est possible de détecter les conflits sémantiques provoqués par des déplacements de code
  • Compte essayer Mergiraf et l’utilise avec git-absorb

    • Ce serait bien que les deux outils fonctionnent parfaitement ou soient officiellement intégrés à Git
  • Le support de Python semblerait utile

    • L’AST basé sur l’indentation de Python semble bien adapté
  • Le support des langages est limité, mais espère que davantage de langages seront ajoutés