![見出し画像](https://assets.st-note.com/production/uploads/images/16772539/rectangle_large_type_2_0806f33059423b99aabb0601f13fac22.png?width=1200)
バージョン管理ツール-TortoiseSVN【無料】の使い方-4(実践篇)
今回は続けてTortoiseSVNの使い方について解説していきます。
基本的な使い方はチェックアウトしローカルコピー(作業コピー)を作成してから、常に最新バージョンを保つ場合は「更新」処理を、自分の修正をリポジトリに反映したい場合は「コミット」処理を行います。
毎回、このように更新処理、コミット処理がスムーズに行けばいいですが、下記図のような場合は(複数のメンバーが同じプロジェクトの同じファイルを同時に修正する)、「マージ」処理、「競合」の解決などが必要になります。
説明:
1.Aさん、Bさんともリポジトリから最新バージョンを取得する(更新)。
※この場合はAさん、Bさんのそれぞれのマシンに全く同じ内容のローカルコピーが作成されます。
2.Aさんも、Bさんも同じファイルを修正。
3.Bさんが自分の修正をリポジトリにコミットする。
※この場合、Bさんの修正がリポジトリに反映され、最新版になります。つまり、この時点でAさんのマシンにある同名ファイルは既に古いバージョンになります。
4.こんな状態で、Aさんも自分が修正したファイルの内容をリポジトリにコミットしたい場合はどうする?
↑の問題を解決すべく、バージョン管理ツールが開発されている訳なので、このようなケースもTortoiseSVNなら簡単に対応できます。
それが「マージ」と「競合」解決方法になります。
上記の図の手順4(Aさんも自分の修正内容をリポジトリに反映したい)にも下記のような2つのケースに分かれます:
ケース1:AさんとBさんが同じファイルの違う場所を修正した場合
ケース2:AさんとBさんが同じファイルの同じ場所を修正した場合
実は、上記のケース1は「マージ」処理で、ケース2は「競合」解決処理で対応することができます。
■ 「マージ」方法
例として、下図のように、HelloWorldFrm.csファイルに対し、Bさん、Aさんがそれぞれ違う部分を修正したとします。
そして、Bさんが先に自分の修正をリポジトリに反映したため、下図のようにリポジトリ上には既にBさんの修正が最新バージョンになっています。
こんな状態で、Aさんのローカルコピーは下図のようになります。
(※Aさんもファイルを修正したので、リポジトリと違うという意味で、「!」アイコンが表示されます。)
Aさんも自分の修正をコミットしましょう。
上記ファイル上で右クリック>「SVN Commit...」を押します。
すると、修正した資材(コミット対象)が一覧表示されます。
確認するために、ファイルをダブルクリックしてみましょう。すると、下図のように、Aさんの修正分が確認できます。(Bさんの修正分はまだ見れません)
修正コメントを記入し、「OK」を押します。
すると、下記のようなエラー画面が表示されます。
エラー内容:
ファイル「HelloWorldFrm.cs」はもう古くなっているので、このままではコミットできない、とのこと。
先に「更新」処理を行って欲しい、ということ。
このまま、「OK」ボタンを押します。すると、このままで「更新」処理を行うかどうかの確認画面が表示されます。「Update」(更新する)をクリックします。
すると、下記の画面が表示されます。
上記の画面からもわかるように、TortoiseSVNが2つの処理を自動的に行ってくれました:
① Updating : リポジトリの新しいファイルでローカルコピーを更新
※Bさんの修正分がAさんのローカルコピーに反映される。
② Merged : リポジトリから取得した最新ファイル(Bさんの修正分)と、Aさんの修正分をマージしてくれた。
上記の処理で、Aさんのローカルコピーは下記のようになっています。
Bさんの修正も反映されたし、Aさん自分の修正もマージされたし、だれの修正も失ってないので、このファイルをコミットします。
そうすると、下記の画面が表示されます(コミット正常終了)。
リポジトリ上のファイルを開いてみても、Bさんの修正分、Aさんの修正分がちゃんと入っていることが分かります。
以上、ソースの「マージ」処理でした。
Point!!
複数の人が同じファイルを修正しても、修正した場所さえ違っていれば、TortoiseSVNが自動的に認識し、マージしてくれるので、ただの「更新」、「コミット」ボタンを押すだけで、全ての処理が行われます。
修正箇所さえかぶってなければ、複数のメンバーが同じファイルを修正したとしても、手動でやることはなにもないので、凄く便利ですね。
■ 「競合」の解決方法
今回は下記のように、Aさん、Bさんとも同じファイルの同じ部分を修正したとしましょう。
もちろん、今回もBさんが先にリポジトリにコミットしたので、リポジトリ上はBさんの修正が反映され、最新バージョンになっている状態です。
Aさんも同じ個所を修正し、ファイル上で右クリック>「SVN Commit...」を押します。
そうすると、下記のような修正ファイル一覧画面が表示されるので、コメントを記入し、「OK」ボタンを押します。
又、リポジトリのバージョンが更新されたので、ローカルコピーはもう古くなったという旨のエラーメッセージが表示されます(「マージ」の時を同じですね)ので、「OK」を押します。
すると、下記の画面が表示されるので、「マージ」の時と同じく、「Update」を押します。
ただ、今回は同じファイル・同じ場所を二人が同時に修正しているので、簡単にマージはできません。さすがTortoiseSVNもどれを採用すればよいか判断できないので、下記の画面を表示します。
Aの部分では、
・「Updating(更新)」処理を行い、リポジトリの最新版をローカルコピーに反映したことを教えてくれます。
・ただ、Aさんの修正をマージしようとしたところ、同じ個所の修正なので、Bさんの修正とAさんの修正のうち、どれを採用すればいいか分からなくなったという意味で、「conficted(競合)」が発生と教えてくれています。
「競合」発生時は、下記のように一時ファイルが作成されます(Bの部分)。
MainFrm.cs.mine ←Aさんが修正した分
MainFrm.cs.r7 ←リポジトリ上の、修正前のバージョン(7)
Mainfrm.cs.10 ←リポジトリ上の、修正後(Bさんがコミット)のバージョン(10)
「OK」を押すと、下記の画面が表示されるので、ファイル「MainFrm.cs」をダブルクリックします。
そうすると、下記のような画面が表示されます。
この画面は、「競合が発生したので、ツールが自動判別することができなくなって、ファイルを手動でマージしてね」という画面になります。
下記のように、Bさん、Aさんの修正を全部取り入れてみましょう。
手動マージ処理が終わったら、「Save」ボタンを押します。すると、下記のような確認画面が表示されるので、「Mark as resolved」を押します。
すると、下記の画面が表示されます。ファイルの状態は「modified」に変わります。「OK」ボタンを押します。
すると、下記の画面が表示し、「競合」解決が完了します。
該当ファイルの変更履歴をみると、先手動でマージした内容が反映されていることが確認できます。
■ まとめ
以上で、「マージ」と「競合」について解説しました。
「マージ」処理はツールがすべて自動的に行ってくれるので、何の手動処理も必要ありません!
「競合」が発生した場合は、同じファイル・同じ場所をそれぞれの人が修正したわけなので、どの修正内容を採用するかはちゃんと教えてあげる必要があります(手動マージ)。
ここまでの内容を理解したら、バージョン管理ツールーTortoiseSVNでのバージョン管理が凄く楽になるはずです。
今回はこれで、バイバイ! Have a nice day!
この記事が気に入ったらサポートをしてみませんか?