詳細解説
gitの何が問題なのか
gitのマージ競合では、コンフリクト箇所が「自分の変更」と「相手の変更」という2つの不透明な塊として表示される。どの行が削除されてどの行が追加されたのか、という本質的な情報が失われてしまう。開発者は結局、両方の差分を手動で突き合わせる必要がある。
Manyanaの革新的な競合表示
Manyanaでは競合を「左側=削除された行、右側=追加された行」という形式で表示する。これにより、何が消えて何が加わったのかが一目でわかる。CRDTの性質を活かし、マージ自体は常に成功する設計になっている。
CRDTとは何か
CRDT(Conflict-free Replicated Data Type)は、分散システムで複数のノードが同時に編集しても自動的に一貫した状態に収束するデータ構造。Manyanaでは各行に永続的な順序情報を持たせることで、どんな編集履歴の組み合わせでも確定的なマージ結果を生成できる。
履歴を保つリベース
gitのリベースは履歴を書き換えるため、元のコミット情報が失われる。Manyanaは「プライマリ祖先」という注釈を使い、リベース的な操作をしつつも元の履歴情報を保持する。これにより、きれいな履歴と完全な追跡可能性を両立させている。
現状と今後
約470行のPythonデモとして公開されており、基本的なマージ操作と競合表示が動作する。ただし、cherry-pickやundo(取り消し)は未実装。プロダクション利用にはまだ距離があるが、コンセプト実証としては十分な完成度を持っている。