4 Punkte von GN⁺ 2024-11-10 | 2 Kommentare | Auf WhatsApp teilen
  • Ein Tool zum Lösen von Git-Merge-Konflikten, das den Baum innerhalb einer Datei versteht und die Anforderungen beider Seiten harmonisch zusammenführt
  • Neue Sprachen lassen sich deklarativ hinzufügen
  • Es kann so konfiguriert werden, dass statt des standardmäßigen Merge-Algorithmus von Git Mergiraf verwendet wird
    • Verbessert Git-Befehle wie merge, revert, rebase und cherrypick
  • Alternativ kann das ursprüngliche Verhalten von Git beibehalten und Mergiraf bei Konflikten manuell aufgerufen werden.

Ziele von Mergiraf

  • Konflikte nicht verbergen
    • Syntaxbewusste Merge-Heuristiken können manchmal zu optimistisch annehmen, dass ein Konflikt gelöst wurde
    • Mergiraf bewahrt im Zweifelsfall den bestmöglichen Zustand, indem es Konfliktmarker in der Datei belässt
    • Wenn alle Konflikte eigenständig gelöst wurden, wird empfohlen, die Vermittlungsarbeit mit dem Befehl mergiraf review zu prüfen
    • Wenn die Zusammenführung fehlerhaft aussieht, kann sie mit mergiraf report einfach gemeldet werden
  • Schnell genug für den interaktiven Einsatz
    • Giraffen können 60 Kilometer pro Stunde laufen
    • Das Zusammenführen von Dateiversionen aus Verzweigungen geschieht oft unbemerkt im Alltag, solange es keine Konflikte gibt
    • Mergiraf bemüht sich, schnell zu sein, um den Arbeitsfluss nicht zu stören
  • Offen für andere Ansätze
    • In vielen Fällen funktioniert zeilenbasiertes Merging gut, und es ist keine Baummanipulation nötig
    • Wenn das zeilenbasierte Merging keinen Konflikt verursacht, gibt Mergiraf dieses Merge-Ergebnis zurück (sehr schnell)
    • Wenn durch zeilenbasiertes Merging doppelte Schlüssel entstehen, führt Mergiraf etwas zusätzliche Arbeit aus, um das Problem zu beheben oder mit Konfliktmarkern hervorzuheben

2 Kommentare

 
2147483647 2024-11-11

Giraffen können also mit 60 Kilometern pro Stunde laufen.

 
GN⁺ 2024-11-10
Hacker-News-Kommentare
  • Arbeitet an etwas Ähnlichem wie SemanticDiff und hat Probleme bei der Nutzung von tree-sitter und GumTree

    • tree-sitter wurde hauptsächlich für Syntax-Highlighting entwickelt, daher ist eine präzise Syntaxanalyse bei Codeänderungen schwierig
    • GumTree liefert schnelle Ergebnisse, gibt aber häufig falsche Zuordnungen zurück
    • Ein Wechsel zu einem Dijkstra-basierten Ansatz führt zu besseren Ergebnissen
  • Der Architekturabschnitt von Mergiraf erklärt tiefgehend, wie das komplexe Tool funktioniert

  • Der Giraffe wurde gewählt, weil sie dank ihrer Höhe weit sehen kann und unter den Landsäugetieren das größte Herz hat

  • Ist kritisch gegenüber der Behauptung, dass bei manchen Einfügungen die Reihenfolge unwichtig sei

    • Auf Sprachebene mag die Reihenfolge unwichtig sein, für Menschen kann eine bestimmte Reihenfolge jedoch wichtig sein
    • Als Beispiel: Zwischen Base struct Foo; struct Bar; fügt Left impl Foo { } ein und Right struct Baz;; der Computer erkennt den Unterschied nicht
  • Sieht die Entwicklung von Merge-Treibern für Git positiv

    • Standard-3-Way-Merges verstehen die Sprache nicht und können daher Probleme verursachen
    • Wenn in Python-Code zwei verschiedene Branches jeweils unterschiedliche print-Anweisungen löschen, entsteht ungültiger Code
  • Syntaxbewusste Tools haben Probleme, wenn Teams die Basissprache passend zum Problem erweitern

    • Erwähnt werden Rust-Makros und Anwendungsfälle mit "go generate"
  • Eine interessante Idee, die bei der Auflösung von Konflikten durch automatisches Formatieren helfen könnte

    • Fragt sich, ob semantische Konflikte erkannt werden können, die durch Codeverschiebungen entstehen
  • Will Mergiraf ausprobieren und nutzt bereits git-absorb zusammen damit

    • Es wäre schön, wenn beide Tools perfekt funktionieren oder offiziell in Git integriert würden
  • Python-Unterstützung dürfte nützlich sein

    • Die einrückungsbasierte AST von Python scheint gut zu funktionieren
  • Die Sprachunterstützung ist begrenzt, es wird jedoch gehofft, dass mehr Sprachen hinzukommen