いくつかのコンテキストでは、複数の共同作業者とリアルタイムでバージョン管理と競合解決を行う必要がある分散プログラムに取り組んでおり、Git の使用を検討しています (具体的にはhttps://github.com/creationix/js- git ) ボンネットの下。各ユーザーは独自の ref を持ちますが、グローバル履歴があります (GitHub のように)。ただし、GitHub とは異なり、すべてのユーザーのフォークは等しくなければならず、プル リクエストは上流のフォークへの一方向ではありません。
私は、2 人のユーザーが独自のオフライン変更[以下に A と B として示されているコミット]を行ったばかりで、共同作業者の開発ブランチから同時にプルすることを選択するシナリオを考えています。マージが同じバージョンの Git で行われ、競合に似たものは何も見つからないと仮定すると、2 つのマージは同じツリーになりますが、(私の知る限り) マージ コミットを行うユーザーは異なるマージ コミット C と C' のハッシュは異なります (したがって、異なります)。
...A---C
/ \ /
O /
\ / \
...B---C'
問題は、競合がなく、C と C' のツリーと親が同一である場合、将来的に簡単に早送りできるようにするために、それらが同じコミットであるように見せたいということです。 、よりクリーンなコミットグラフの表示を可能にします。
私の見方では、名前、電子メール、およびコミット時間がマージコミットで自動的に同一に設定された場合 (つまり、親の最新のコミット時間に automerge@example.com によってマージされた場合)、C と C' は同一ですか?では、信頼できるアップストリーム ソースから C/C' を取得したのと同じでしょうか? このアプローチで注意すべき落とし穴や危険性はありますか? または、Git は、私が知らないいくつかの機能でこれを自動的に処理できますか?