- Gitのマージコンフリクトを解決するツールで、ファイル内のツリーを理解し、双方の要求を調和的に解決
- 新しい言語を宣言的に追加可能
- Gitのデフォルトのマージアルゴリズムの代わりにMergirafを使うよう設定可能
merge、revert、rebase、cherrypick などのGitコマンドを強化
- あるいはGit本来の動作を維持したまま、コンフリクト発生時に手動でMergirafを呼び出すことも可能。
Mergirafの目標
- コンフリクトを隠さない
- 構文を認識するマージヒューリスティクスは、ときに過度に楽観的にコンフリクトが解決されたと見なしてしまうことがある
- Mergirafは、疑わしい場合にはファイル内にコンフリクトマーカーを残すことで、最善の状態を保全
- すべてのコンフリクトを自力で解決した場合は、
mergiraf review コマンドで調停作業を確認することを推奨
- マージが誤っているように見える場合は、
mergiraf report で簡単に報告可能
- 対話的な利用に十分な速度
- キリンは時速60キロメートルで走ることができる
- ファイルの分岐したバージョンをマージする作業は、コンフリクトがない限り、気づかれないまま日常的に発生することが多い
- Mergirafは作業を妨げないよう高速化に努めている
- 他の方法にもオープン
- 多くの場合、行ベースのマージはうまく機能し、ツリー操作は不要
- 行ベースのマージでコンフリクトがなければ、Mergirafはそのマージ結果を返す(非常に高速)
- 行ベースのマージによって重複キーが生成された場合、Mergirafは問題を解決するか、コンフリクトマーカーで強調表示するために少し追加作業を行う
2件のコメント
キリンは時速60キロメートルで走ることができるんですね。
Hacker Newsのコメント
SemanticDiffと似た取り組みをしており、tree-sitterとGumTreeの利用で問題に直面している
Mergirafのアーキテクチャのセクションは、複雑なツールの動作方法を深く説明している
キリンを選んだ理由は、高さがあるので遠くまで見渡せて、陸上哺乳類の中で最も大きな心臓を持っているからである
一部の挿入では順序が重要ではないと主張している点に批判的である
struct Foo; struct Bar;の間に、Leftがimpl Foo { }を挿入し、Rightがstruct Baz;を挿入する場合、コンピュータはその違いを認識できないGitのマージドライバ開発に前向きである
printを削除すると、無効なコードになってしまうチームが問題に合わせて基本言語を拡張するとき、構文認識ツールは苦労する
自動フォーマットに関する競合解決に役立つ可能性のあるアイデアである
Mergirafを試してみる予定で、git-absorbと一緒に使っている
Pythonサポートが有用そうである
言語サポートは限定的だが、さらに多くの言語サポートが追加されることを望んでいる