このシナリオを想像してみてください。
- アリスとボブはどちらも、1つのテキストファイルを含む中央マスターMercurialリポジトリのクローンを作成します
- アリスとボブの両方がファイルの同じ行に変更を加え、コミットします
- ボブは中央リポジトリにプッシュバックしますが、アリスはプッシュバックしません
- アリスは今、彼女のリポジトリに引き込み、彼女が2つの頭を持っていることに気づき、マージします
- マージは競合であるため、彼女は競合を解決します
- その後、アリスはコミットしますが、プッシュしません
- ボブは、ファイルの他の場所(つまり、最初の変更の近くではない場所)でファイルにさらに変更を加え、コミットしてプッシュします。
- アリスは、マージされたファイルで、ボブが変更したのと同じ場所で同様の変更を行い、コミットします
- アリスは引っ張って、さらに別の双頭のリポジトリを発見し、彼女はマージします
上記のシナリオの別のビューを次に示します
(「CHANGE」の後の数字は、その人がファイルの「部分X」を変更したことを意味します。両方のユーザーが同じ部分を変更した場合、変更が異なる場合は、マージの競合が発生します)
アリスとボブ クローンマスタークローンマスター ----------------------------------------- 変更1<-----+ COMMIT+-今後のマージの競合 ----------------------------------------- | 変更1<-----+ 専念 押す ----------------------------------------- プル<-ボブのチェンジ+1ヘッド MERGE<-余分な頭を取り除こうとします 競合の解決<-マージの競合を解決します 専念 ----------------------------------------- 変更2<-----+ COMMIT+-さらに別のマージ プッシュ| 先の対立 ----------------------------------------- | 変更2<-----+ 専念 プル<-ボブの変化、再び+1ヘッド MERGE<-余分な頭を取り除こうとします 解決 ???
この時点で、私の質問はこれです:
- マージツールは、彼女の最初のマージ解決を考慮に入れますか?ボブはアリスの変更をプルしたことがないため、彼のコピーには、アリスが行った変更、最初の変更(ボブと競合していた)、マージ、およびボブの最新の変更と競合している最新の変更がまだ含まれていません。 。
ボブのバージョンのファイルとアリスのバージョンのファイルを取得し、任意のマージプログラムに渡した場合、両方の変更に競合のフラグが立てられます。
言い換えると、競合ツールは、元の競合と新しい競合の両方を解決するように、または最新の競合のみを解決するようにアリスに要求しようとしますか?
MercurialはAliceに最新の競合を解決するように依頼するだけだと推測しています(私はこれを試していませんが、この問題をテストするための何らかのテストスクリプトを作成しようとしています)。
サードパーティの差分/マージプログラムを使用するようにMercurialを設定するとどうなりますか?これは引き続き適用されますか?たとえば、Beyond Compareを使用するようにインストールを構成しましたが、2つのファイル(ボブの変更のみとアリスの変更+マージ解像度)は、初期解像度の有無にかかわらず提供されますか?言い換えれば、Beyond Compareを使用している場合、ここでも正しいことが起こります(それがまったく行われていると仮定します)。