4 ポイント 投稿者 GN⁺ 2024-11-10 | 2件のコメント | WhatsAppで共有
  • Gitのマージコンフリクトを解決するツールで、ファイル内のツリーを理解し、双方の要求を調和的に解決
  • 新しい言語を宣言的に追加可能
  • Gitのデフォルトのマージアルゴリズムの代わりにMergirafを使うよう設定可能
    • mergerevertrebasecherrypick などのGitコマンドを強化
  • あるいはGit本来の動作を維持したまま、コンフリクト発生時に手動でMergirafを呼び出すことも可能。

Mergirafの目標

  • コンフリクトを隠さない
    • 構文を認識するマージヒューリスティクスは、ときに過度に楽観的にコンフリクトが解決されたと見なしてしまうことがある
    • Mergirafは、疑わしい場合にはファイル内にコンフリクトマーカーを残すことで、最善の状態を保全
    • すべてのコンフリクトを自力で解決した場合は、mergiraf review コマンドで調停作業を確認することを推奨
    • マージが誤っているように見える場合は、mergiraf report で簡単に報告可能
  • 対話的な利用に十分な速度
    • キリンは時速60キロメートルで走ることができる
    • ファイルの分岐したバージョンをマージする作業は、コンフリクトがない限り、気づかれないまま日常的に発生することが多い
    • Mergirafは作業を妨げないよう高速化に努めている
  • 他の方法にもオープン
    • 多くの場合、行ベースのマージはうまく機能し、ツリー操作は不要
    • 行ベースのマージでコンフリクトがなければ、Mergirafはそのマージ結果を返す(非常に高速)
    • 行ベースのマージによって重複キーが生成された場合、Mergirafは問題を解決するか、コンフリクトマーカーで強調表示するために少し追加作業を行う

2件のコメント

 
2147483647 2024-11-11

キリンは時速60キロメートルで走ることができるんですね。

 
GN⁺ 2024-11-10
Hacker Newsのコメント
  • SemanticDiffと似た取り組みをしており、tree-sitterとGumTreeの利用で問題に直面している

    • tree-sitterは主に構文ハイライト向けに作られているため、コード修正時の正確な構文解析が難しい
    • GumTreeは高速に結果を返すが、誤ったマッチングを頻繁に返す
    • Dijkstraベースのアプローチに切り替えて、より良い結果を得ている
  • Mergirafのアーキテクチャのセクションは、複雑なツールの動作方法を深く説明している

  • キリンを選んだ理由は、高さがあるので遠くまで見渡せて、陸上哺乳類の中で最も大きな心臓を持っているからである

  • 一部の挿入では順序が重要ではないと主張している点に批判的である

    • 言語レベルでは順序が重要でない場合があっても、人間にとっては特定の順序が重要なことがある
    • 例として、Baseの struct Foo; struct Bar; の間に、Leftが impl Foo { } を挿入し、Rightが struct Baz; を挿入する場合、コンピュータはその違いを認識できない
  • Gitのマージドライバ開発に前向きである

    • 標準の3-wayマージは言語を認識しないため、問題を引き起こす可能性がある
    • Pythonコードで、2つの異なるブランチがそれぞれ別の print を削除すると、無効なコードになってしまう
  • チームが問題に合わせて基本言語を拡張するとき、構文認識ツールは苦労する

    • Rustのマクロや "go generate" のユースケースに言及している
  • 自動フォーマットに関する競合解決に役立つ可能性のあるアイデアである

    • コード移動によって発生する意味的な競合を検出できるのか気になっている
  • Mergirafを試してみる予定で、git-absorbと一緒に使っている

    • 2つのツールが完璧に動作するか、あるいはGitに正式統合されるとよい
  • Pythonサポートが有用そうである

    • PythonのインデントベースのASTはうまく機能しそうである
  • 言語サポートは限定的だが、さらに多くの言語サポートが追加されることを望んでいる