衝突とマージ(2)

先に(1)を見て下さい。今度は自動的にマージされないケースです。


衝突

衝突の例。またもや、sandbox/trunk/src/hello/hello.cに対してユーザ「test1」と「test2」が変更を加えています。

test1の変更点

test1はmorningで起動するとGood Morningが表示されるように変更しています。

test2の変更点

test2は--help以外の引数を渡すとそれを表示するように変更しています。

先にtest1がコミットします。

test1コミット完了

やはり先にコミットする側が成功します。

次にtest2がコミットします。

test2コミット失敗

予想通りコミットに失敗します。やはり最新を取得しろといっているので取得してみます。

競合

競合状態と言われました。同じ箇所を修正した為に自動的にマージできないということです。

ちなみに古いバージョンでは「衝突」と称していた為、いまだに衝突と呼んでいたりします。

競合時にできるファイルたち

こんなファイルができます。こうなると残念ながら手でシコシコマージするしかありません。

単にどちらかの変更を順に適用すればいい場合は、hello.cを右クリック→TortoiseSVN→競合の編集、で TortoiseMergeが立ち上がるのでこれを使えばいいです。

TortoiseMerge

使い方は下のペインの!を右クリックしてそれっぽいものを選んで???を解消し、最後に保存するでOK。

TortoiseMergeで解消できない場合、対象ファイル(この場合hello.c)を編集します。

ファイルの中身

<<<<<<<と>>>>>>>で囲まれたブロックが競合部分です。

TortoiseMergeは少し画面がゴチャゴチャしてるので、 こうやってメモ帳(またはテキストエディタ)で眺めてるとウマイ解決法がみつかったりします。

マージ完了

この場合は「mineの前にtheirsのテキストブロックを利用」を使った後に3行ほど手で修正しました。

解決完了

何らかの方法でマージ作業が完了したら、対象ファイルを右クリック→TortoiseSVN→競合の解消で解決済みにして下さい。 これでコミットできるようになります。


戻る