Subversion(TortoiseSVN)でコンフリクト(競合/衝突)を解決する方法(手順)
Subversionを利用するからには、複数人で使うことが多いでしょう。
場合によっては、複数の人が同時に同じファイルを編集する必要が出てくる場合があります。
このときに、テキスト形式のファイルであれば、
別の人の編集が終わるのを指をくわえて待つ必要はありません。
(ご注意)
このページをご利用になった結果の影響については、
一切責任を負いませんので、あらかじめご了承願います。
- もともと、こんなファイルがあったとします。
↓ sample1.txt
- Aさんが、ファイルを変更してコミットしました。
↓ Aさん変更後 sample1.txt
- 今回の例では1行だけですが、
本当の開発ではもっとたくさんの変更があるでしょう。
でも、BさんはAさんの作業が終わるのを待つ必要はありません。
同じ時に同じファイルの別のところを変更しました。
↓ Bさん変更後 sample1.txt
- Bさんはコミットしようとしますが、Aさんが先にコミットしているため、
コミットできません。
- ここでBさんがしないといけないことは、「更新」することです。
- 画面をよく見ると、自動的にファイル(sample1.txt)がマージされたことがわかります。
- 実際にファイルがマージされていることを確認してください。
↓ BさんのPC(ローカル)でマージ後 sample1.txt
- 問題がなければ、Bさんはコミットしてください。
これでBさんの作業は完了です。
- では、もうちょっとややこしいことにになってきて、
Bさんがこうして四苦八苦してまだコミットもしていないうちに、
Aさんが同じファイルをもう一度編集しなければならなくなりました。
しかも、今度はBさんが編集しているところと同じ場所です。
それでも、AさんはBさんの作業が終わるのを待つ必要はありません。
- 先と同じ条件のため、Aさんはコミットできません。
このため、Aさんは更新します。しかし、今度は同じ場所を編集しているため、
自動的にマージすることはできませんでした。
このことを、コンフリクトが発生した、衝突が起こった、競合状態にある、などといいます。
- ファイルのアイコンが競合状態になっています。
このファイルを右ボタンで選択して、
コンテキストメニューより、[TortoiseSVN] → [競合の編集]を選択してください。
競合の解消ではありません!。
- マージツールが起動します(デフォルトはTortoiseMerge)ので、
ツールを使って競合を解決できるように編集してください。
左上がリポジトリ、右上がローカルファイル、下半分が編集結果になります。
- 編集が終了したら、保存してください。
- もし、ファイルに「<<<<<<< .mine」「>>>>>>> .r(リビジョン番号)」などの行が
残っている場合は、競合の編集がまだ正しく保存できていませんので、
この場合はもう一度ファイルを右ボタンで選択して、
コンテキストメニューより、[TortoiseSVN] → [競合の編集]を選択してください。
- 保存したファイルの内容に問題がないことを確認してください。
- 編集が終わったことは、手動でSubversionへ通知する必要があります。
このファイルを右ボタンで選択して、
コンテキストメニューより、[TortoiseSVN] → [競合を解消]を選択してください。
競合を編集する前に、間違えて解消してしまわないように注意してください。
- 確認画面を表示しますので、[OK]を押してください。
- これで競合が解消しました。
- 問題がなければ、Aさんはコミットしてください。
(おまけ)
もし、間違えて競合を編集する前に解消してしまったらどうしましょう。
あわてていたりすると、どうしても間違えてやってしまうんですよね‥‥(涙)。
でも、ここで「元に戻す」などを選んでしまうと、本当に「元に」戻って
これまでの編集は消えてなくなってしまいます。
ここまでやってしまうとそれこそどうしようもありません。
- 競合を解消する前のファイルがどうなっているかを思い出してください‥‥。
‥‥ですよね。
幸いここには、自身の編集と、リポジトリの編集が、両方とも書かれています。
テキストエディタ等を使って、このファイルを直接編集することはいかがでしょう?
最初から作業をやり直すことを考えれば、ずっとマシなのでは、と思うのですが‥‥。
shacho@critical.ne.jp
Last modified: Thu May 21 18:00:00 JST 2009