gitのコンフリクトとは?SVNでも同じ?

チームで開発していると、違う開発者がまったく同じ場所に別々の修正をかけてしまうといった問題がしばしば発生します。

トピックブランチをメインブランチにマージするときにコンフリクトが起きることがある。

なぜコンフリクトは発生するの

マージの際にGitは変更箇所を自動的に統合してくれます。しかし、同じファイルの同じ場所への変更が同時にある場合、Gitはどちらを優先すべきか判断できないのでエラーをだします。この状態を「コンフリクトが起きた」と言います。

コンフリクトが起きる場合は?

特に複数人で作業する際には十分に起き得るのですが、

  • 同じ箇所を
  • 別々のブランチで
  • 別々の変更をかけてしまっているのに
  • マージする

この場合、二つの分岐で不整合が起きてしまい、履歴としてその状態から進ませることができなくなります

3ウェイマージ

上図の場合、CからAの変更点(CA)、CからBの変更点(CB)があり、それらの変更点を両方取り込んだものがDになる。

Dが問題なく作成できるかどうかは、CAの変更点とCBの変更点の重複の有無とその内容による。

重複する点がなければそれぞれの変更を適用でき、問題なくDが作成される。
また、重複する点があるときでもその変更内容が同じであれば、問題なくDが作成される。

問題となるのは、重複する点の変更内容が異なるとき。このときはどちらを適用すべきか判断するために、手動で対応しなければならない。これがコンフリクト、変更点が衝突したという状態である。

CAの変更点、CBの変更点、CAとCBの変更点の重複度合い、という3つの比較に基づいてマージを行うということで、3ウェイマージと呼ばれている。

まとめ

(Visited 12 times, 1 visits today)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする