1

私のアプリの 1 つで、ブランチ/マージの実装を考えていました。いくつかのシナリオで競合なしでマージする方法がわかりません。これを例に取りましょう。

ルートはいくつかのコードを記述します。A、B、C が彼から引っ張ってきて機能を追加します。C が完了したので、A と B はそこからプル/マージします。ルートをベースとしてCと比較することで機能すると思います。ここで、A と B はさらに機能を記述して終了します。

A からプルしてから B からプルするとどうなりますか? それらのベースはルートであり、どちらも C からプルされているため、同じ行が編集されています。競合かどうかはどのようにわかりますか? C が書いた行を編集してから B からプルするとどうなりますか? それは衝突になると思います。私の最後の質問は、C からプルした後に A と B が関数の場所をシャッフルするとどうなるかということです。私は今、差分認識がどれほど優れているかにかかっていると思いますが、競合なしでAとBの両方からどのように引き出すことができるかはわかりません

4

2 に答える 2

2

競合かどうかはどのようにわかりますか?

  • DVCS が通知するため、同一の行が編集された場合、マージの手動解決がトリガーされます。
  • またはあなたのため:
    • セマンティックの競合を見つけるのに十分なほどコードを知っている
    • セマンティックの競合を一掃する単体テストのバッテリを拡張します。

しかし、「まだ DVCS クールエイドを飲んでいない」のコメントで述べたように、定期的に (CVCS、集中型バージョン管理システムよりもはるかに速いペースで) コミットしてマージすることが、ロジックの競合を回避したり、競合をできるだけ小さくしたりするための鍵となります。できるだけ。
セマンティック コンフリクトの詳細については、Martin Fowler の記事を参照してください。

于 2012-10-30T08:08:56.063 に答える
2

たとえば、A と B が同じ行を (異なる方法で) 編集すると、競合が発生することがあります。次に、DVCS にマージを依頼するのではなく、変更を調べて (そしておそらく A と B に話しかけて)、手動で変更をマージする必要があります。

また、論理的な競合が発生する可能性もあります (A と B はファイルの異なるセクションを変更するため、明らかな競合はなく、DVCS はマージを処理できますが、これらのセクションは互いの想定を破るため、バグが発生します)。バージョン管理ではこれを修正できません。開発者間のコミュニケーションと単体テストのみです。

于 2012-10-28T22:45:10.850 に答える