Sun WorkShop TeamWare ユーザーズガイド |
第 6 章
ファイル間の相違の解決
同じファイルの 2 つのコピーの両方に変更を加えた場合、それらのファイル (コピー) は衝突状態にあります。自分の子ワークスペースで変更したファイルをプットバックしようとした際に、親ワークスペースのファイルも更新されていた場合には、これらのファイル間の相違を解決するまで、そのファイルのプットバックはできません。ファイルマージツールは、ファイル間の相違を解決するためのツールです。
ファイルマージツールの起動
「ワークスペース管理」ウィンドウでは、衝突があるワークスペースは、通常とは異なるアイコンで表示されます。ワークスペースアイコン内のファイルの 1 つが赤く表示され、放射状に出ている赤い線によって衝突が存在することが示されます。図 6-1 の例は、
ws2
ワークスペースに、その親のws1
と衝突するファイルが存在することを示しています。
図 6-1 ワークスペースの衝突例衝突をすぐに解決する必要はありません。そのまま変更を続けて、子ワークスペース内に衝突しているファイルの新しいデルタを作成できます。新しいデルタは全体が 1 つの分岐になります。最終的に衝突を解決すると、最新のデルタが、親からブリングオーバーしたバージョンとマージされます。親にファイルをプットバックするには、あらかじめ衝突を解決しておく必要があります。ファイルが衝突した状態でプットバックしようとすると、ブリングオーバーをするように求められ、「トランザクション」ダイアログボックスの「衝突解決」タブに衝突しているファイルが表示されます。
ファイルマージツールは、次の 2 つの場所から起動できます。
「TeamWare」メニューからのファイルマージツールの起動
ファイルマージツールを起動するには、ワークスペース管理ツール、バージョン管理ツール、フリーズポイントツールのいずれかのメインウィンドウから「TeamWare」 「ファイルマージ」を選択します。
「衝突解決」タブからのファイルマージツールの起動
「トランザクション」ダイアログボックスの「衝突解決」タブは、ユーザーとファイルマージ機能の仲介役として、更新ブリングオーバートランザクション中に検出された衝突しているファイルの一覧を表示します。衝突解決トランザクションでは、衝突しているファイルを選択し、そのファイルが読み込まれた状態でファイルマージツールを起動できます。プットバック中に衝突の解決を行うように設定すると、自動的に「トランザクション」ダイアログボックスの「衝突解決」タブが表示されます。この「衝突解決」タブは、「アクション」 「衝突解決」を選択して開くこともできます。
「ファイルマージ」ウィンドウの表示
ファイルマージツールを起動すると、「ファイルマージ」ウィンドウが表示されます (図 6-2 を参照)。この「ファイルマージ」ウィンドウには、上の部分に横に並んで 2 つ、下の部分に 1 つの区画があります。上の 2 つの区画は、同じファイルの異なる 2 つのバージョン、下の区画はマージ結果を表示します。上の 2 つの区画は読み取り専用です。下の区画には、ファイルの 2 つのバージョンの一方または両方から選択された行が含まれます。そして、この下の区画で編集し、最終的なマージしたバージョンを作成できます。
上の 2 つの区画に表示されるデルタは、その共通の祖先デルタとの比較した結果です。
親と子に表示された両方のデルタは、共通の祖先であるデルタから派生しています。この区画構成により、親および子デルタと祖先、親と子デルタ同士の 3 方向から比較を行うことができます。
ワークスペース内での衝突の解決
1. 「ワークスペース管理」ウィンドウから、衝突が存在するワークスペースのアイコンをダブルクリックします。
- 「トランザクション」ダイアログボックスの「衝突解決」タブが開き、そのファイルリスト区画に、衝突しているファイル名が表示されます。
2. 「衝突をマージ」をクリックします。
- ファイルマージツールが起動し、ファイルリスト区画に示されているファイルの処理が開始されます。リスト内のすべてのファイルについて、SCCS 履歴ファイルから親デルタと子デルタ、共通祖先の情報が抽出され、そのパス名がファイルマージツールに渡されます。「ファイルマージ」ウィンドウが表示され、該当するファイルが読み込まれて、マージが可能になります。
3. ファイルマージツールを使用し、ファイルの親と子のバージョン間の相違を解決します。
- ファイルマージツールの使用方法については、「相違の解決」を参照してください。
4. 衝突を解決したらファイルを保存します。
- ファイルマージツールを使用して、ファイルの親と子のバージョン間の相違を解決すると、子の SCCS 履歴ファイルに新しいデルタが作成されます。新しいデルタには、ファイルマージツールを使用して作成したマージ結果が含まれます。
5. この手順を繰り返してすべての衝突を解決します。
図 6-2 「ファイルマージ」ウィンドウ「ファイルマージ」ウィンドウのグリフについて
相違が簡単に見分けられるよう、ファイルマージでは、いくつかの色とグリフを使用して、相違する行を強調表示します。黄色は追加されている行、赤色は変更されている行、緑色は削除されている行を示します。
「ファイルマージ」ウィンドウで使用されるグリフの意味は、2 つのバージョンの比較か (入力ファイル 2 つ)、2 つのファイルのバージョンに対して共通の祖先を指定したか (入力ファイル 3 つ) で異なります。図 6-2 は、2 つのファイル間の相違を示すグリフが表示されている「ファイルマージ」ウィンドウを示しています。
入力ファイルが 2 つの場合
ファイルマージに 2 つのファイルだけが読み込まれ、それらのファイルの対応する行に相違がある場合は、それぞれのファイルの該当する行にグリフが表示されます。
- 2 つの行に相違がない場合、グリフは表示されません。
- 2 つの行に相違がある場合は、両方のテキスト区画のその行の先頭に縦棒 (
|
) が表示され、相違部分が黄色で強調表示されます。- ある行が一方のファイルにあって、もう一方にない場合は、その行が存在する方のファイルの該当する行の先頭に正符号 (
+
) が表示され、相違部分が赤色で強調表示されます。- 相違が解決された行には、白抜きのグリフが表示されます。
入力ファイルが 3 つの場合
マージする 2 つのファイルを読み込むときに、3 つ目のファイルとして、それら 2 つのファイルの祖先ファイルを指定できます。祖先ファイルは、マージする 2 つのファイルより古いバージョンのファイルです。祖先ファイルを指定すると、そのファイルが、マージする 2 つのファイルを比較する基準として使用されます。また、祖先ファイルを指定することによって、自動マージを行うことができます。ファイルマージは、祖先ファイルから派生したファイル、すなわち、子孫ファイル内の、祖先と異なるすべての行にマークを付け、それら 3 つのファイルに基づいてマージファイルを作成します。
マージする 2 つのファイル内の、祖先ファイルと異なる行は、変更バーのマークが付けられ、いくつかの色を使用して強調表示されます。
- 3 つのファイルの間で行に相違が存在しない場合、グリフは表示されません。
- 祖先には存在しない行が、子孫のいずれかまたは両方に存在する場合は、その行が存在するファイルの該当する行の先頭に
正符号 (
+
) が表示され、相違部分が黄色で強調表示されます。- 祖先に存在する行が、子孫のいずれかまたは両方の対応する行と異なる場合は、その異なる行が存在するファイルの該当する行の先頭に縦棒 (|) が表示され、相違部分が赤色で強調表示されます。
- 祖先に存在する行が、子孫のいずれかまたは両方に存在しない場合は、その行が存在しないファイルの該当する行位置の先頭に負符号 (
-
) が表示され、相違部分が抹消線付きの緑色で強調表示されます。- 相違が解決された行には、白抜きのグリフが表示されます。
ファイルマージツールへのファイルの読み込み
衝突解決によってファイルマージツールにファイルが自動的に読み込まれなかった場合は、「ファイル」 「開く」を選択するか、「開く」ボタンをクリックすることによって、手動でファイルを読み込むことができます。図 6-3 は、「ファイルを開く」ダイアログボックスを示しています。
図 6-3 ファイルマージツールにおける「ファイルを開く」ダイアログボックス「ファイルを開く」ダイアログボックスには、表 6-1 に示すフィールドがあります。
マージするファイルが読み込まれた「ファイルマージ」ウィンドウの各テキスト区画の上部には、それぞれ適切なファイル名 (左のファイル名、右のファイル名、出力ファイル名) が表示されます。祖先ファイルを指定した場合は、ウィンドウのヘッダー部分にそのファイル名が表示されます。
相違の解決
相違の解決では、元のデルタ (親または子) のいずれか一方の行をそのまま採用することも、マージ版を手作業で編集することもできます。適切な変更が行われたことを、コントロールパネルのボタンをクリックすることによって示すと、現在注目している相違点は「解決された」ことになります。相違点が解決されると、相違箇所のグリフは白抜きのグリフに変わります。ファイルマージツールは、自動的に次の相違箇所に進むか (「自動的に進む」属性がオンの場合)、指定された相違箇所に進みます。
下部のテキスト区画では、相違箇所が空白行で示されます。相違を解決するには、次のいずれかの操作を行います。
- 採用するバージョンのテキスト区画上部の「受け入れ」または「受け入れて次へ」をクリックして表示されている行を採用し、マージ版に反映する。
- マージ版を手作業で編集し、「編集」 「現在のマークを解決済みに変更」を選択することによって相違箇所に解決済みのマークを付ける。
衝突状態にない相違行 (すなわち、一方のファイルでだけ変更されている行) を自動的にマージ版に取り込むように設定する場合は、「オプション」 「自動マージ」を選択します。そうすると、ファイルマージツールの起動時に、解決されているすべての行が自動的にマージ版に取り込まれます。詳細は、「自動マージの使用方法」を参照してください。
1. 処理する相違箇所を決めます。2. 適切な行を選択して、受け入れます。3. 「次」ボタンをクリックして、ファイルの次の相違箇所に移動します。
- 別の相違箇所に移動するには、次のいずれかの操作をします。
- 加えた変更を放棄して最初からやり直す場合は「再読み込み」ボタンをクリックします。相違の解決がすべて放棄され、相違を解決する前のファイルが読み込まれます。
4. 相違をすべて解決したら、「保存」をクリックします。自動マージの使用方法
共通の祖先ファイルを読み込むことによって、自動的に相違を解決できることがあります。自動マージは、次の規則に基づいて相違を解決します。
- どちらの子孫でも行が変更されていない、すなわち、3 つのファイル間で行の内容が同じ場合は、その行をマージ版に取り込む。
- いずれか一方の子孫でだけ行が変更されている場合は、変更されている方の行をマージ版に取り込む。変更は、行全体の追加または削除のこともあれば、一部変更のこともあります。
- 行に対する変更内容が両方の子孫でまったく同じ場合は、その行をマージ版に取り込む。
- 両方の子孫で変更内容が異なる、すなわち、3 つのファイルの間で行の内容が異なる場合は、マージ版には行は取り込まれません。この場合は、右または左のファイルのいずれかの行を採用するか、マージ版を手作業で編集して相違を解決する必要があります。
- 相違が解決された行には、白抜きのグリフを表示する。
自動マージ規則のまとめ
表 6-2 に、自動マージのアルゴリズムを示します。表で使用されている用語は、それぞれ次のことを意味します。
- 祖先は、祖先ファイル内のテキスト行を意味します。
- 変更 1 は、子孫の一方のファイル内の、変更が加えられた行を意味します。
- 変更 2 は、変更 1 と異なる別の変更を意味します。
- 左右の子孫で行の変更内容が異なる場合、それらの行はいずれもマージ版に取り込まれません。
表 6-2 自動マージ規則のまとめ 祖先 祖先 祖先 変更 1 祖先 変更 1 祖先 変更 2 変更 2 変更 1 変更 1 変更 1 変更 1 変更 2 自動マージされない
変更の取り消し
「編集」 「元に戻す」を使用して変更を取り消すことができます。
「ファイルマージ」ウィンドウの「再読み込み」ボタンを使用して相違を解決するためのすべての編集内容を放棄し、ディスクからファイルを読み込むこともできます。「自動マージ」オプションが選択されている場合は、衝突状態にない相違はすべて下部の区画に表示されます。
ファイルマージツールのオプション
次の 2 つの場所で相違解決とファイルマージツールの動作を変更できます。
相違解決オプション
「ツール属性」ダイアログボックスの「衝突解決」タブ (図 6-4) で、「トランザクション」ウィンドウの「衝突解決」区画の動作を変更できます。「衝突解決」タブには、表 6-3 に示す属性があります。
図 6-4 「ツール属性」ダイアログボックスの「衝突解決」タブ
「ファイルマージ」ウィンドウの表示オプション
「ファイルマージ」ウィンドウの「オプション」メニューには、次の表に示すオプションが含まれています。このメニューの最初の 5 つのオプションはトグル方式で、選択するたびに有効 / 無効が切り替わります。有効にすると、オプションの左側に小さなボックスが表示されます。
表 6-4 は、「ファイルマージ」ウィンドウの表示オプションをまとめています。
ファイルのマージ例
ここでは、共通の祖先を持つ 2 つのファイルのマージ例を紹介します。子孫ファイルの名前は
file_1
とfile_2
、祖先ファイルの名前はmatriarch
です。matriarch
を編集することによって、file_1
とfile_2
が作成されています。子孫ファイルでは、行の削除や追加、行の一部変更などの、さまざまな変更が行われています。下記のマージ例の各行を見ると、変更が加えられているかどうか、また変更が加えられている場合は、どのように変更されているかが分かります。コード例 6-1 に示すように、祖先ファイルはわずか 12 行の大きさです。
デフォルトでは、読み込んだファイルに行番号は表示されませんが、分かりやすくするために、この例では行番号を表示しています。
コード例 6-2 は、
file_1
の内容を示しています。このファイルと祖先ファイルmatriarch
との相違は次のとおりです。
matriarch
ファイルの行番号 1 の行が削除されています。- 行番号 4 の行の後に新しい行が追加されています。
- 行番号 6 の行が変更されています (
file_2
では、これとは異なる別の変更が加えられています)。- 行番号 8 の行が変更されています (
file_2
でも同じ変更が加えられています)。
コード例 6-2 子孫ファイル ( file_1
)
2 This line is in all three files3 This line is deleted in file_24 This line is in all three files&&& Added to file_1 &&&6 This line is modified in file_1 from matriarch5 This line is in all three files7 This line is in all three files8 #&# Changed in file_1 and file_2 #	 This line is in all three files10 This line is changed in file_211 This line is in all three files12 This line is in all three filesコード例 6-3 は、
file_2
の内容を示しています。このファイルと祖先ファイルmatriarch
との相違は次のとおりです。
matriarch
ファイルの行番号 3 の行が削除されています。- 行番号 6 の行が変更されています (
file_1
では、これとは異なる別の変更が加えられています)。- 行番号 8 の行が変更されています (
file_1
でも同じ変更が加えられています)。- 行番号 10 の行が変更されています (
file_1
では変更されていません)。- 行番号 11 の行の後に新しい行が追加されています。
コード例 6-3 子孫ファイル ( file_2
)
1 This line is deleted in file_12 This line is in all three files4 This line is in all three files5 This line is in all three files6 This line is altered in file_2 from matriarch7 This line is in all three files8 #&# Changed in file_1 and file_2 #	 This line is in all three files10 ### Changed in file_2 ###11 This line is in all three files### Added to file_2 ###12 This line is in all three filesこれらのファイルを自動マージすると、「ファイルマージ」ウィンドウの左上にマージ結果が表示されます。相違は 7 つで、そのうちの 6 つが解決され、1 つが未解決になります (図 6-5 を参照)。解決された相違には、白抜きのグリフが表示されます (図 6-6 と 図 6-7 を参照)。
図 6-5 自動マージ後のfile_1
とfile_2
のマージ結果 図 6-6 自動マージ後の子区画のfile_1
の内容
図 6-7 自動マージ後の親区画のfile_2
の内容各グリフの意味は次のとおりです。縦棒 (|) は、その行に変更があったことを意味します。正符号 (+) はその行が追加されていること、負符号 (-) はその行が削除されていることを意味します。未解決の行は塗りつぶしのグリフ、解決済みの行は白抜きのグリフで示されます。カラーマップが使い切られていない限り、これらのグリフは通常とは異なる色で強調表示されます。デフォルトでは、赤色が変更、緑色が削除、黄色が追加を意味します。
未解決の相違 (上記の例では行番号 6 の行) には、縦棒のマークが付きます。
相違を確認する
ファイルマージツールでは、未解決の相違 (上記の例の
file_1
とfile_2
の行番号 6 の行) が強調表示されます。自動マージで相違を解決すると、その間のファイルの最新状態が「マージ後の結果」区画に表示されます。次の相違に進むには、その操作をする区画の上の下矢印ボタンをクリックするか、「ナビゲート」 「次」 「相違」を選択します。次の相違が現在の相違になります。
下矢印ボタンを使用することによって、相違を順にたどることができます。
自動マージでは、一方のファイルだけで加えられた変更を残します。自動マージによって相違が解決されなかった場合は (相違に関係する行には、通常とは異なる色の塗りつぶされたグリフが表示されます)、手作業でその相違を解決する必要があります。縦棒は、その行が追加や削除をされたものではなく、変更されていることを示します。2 つのファイルの同じ行に変更が加えられていて、その変更内容が異なる場合、自動マージはその行をマージ版に取り込みません。そうした行は、どちらの行を採用するかをユーザー自身で決定する必要があります。
相違を解決する
file_1
の行をマージ版に採用する場合は、左の区画の「受け入れ」または「受け入れて次へ」ボタンをクリックします。file_2
の行をマージ版に採用する場合は、右の区画の「受け入れ」または「受け入れて次へ」ボタンをクリックします。- 手作業でマージ版を編集します。
出力ファイルを編集する
1. マージ版のある下部のテキスト区画内の、編集する行位置にポインタを置きます。
- この例では、次の行を入力すると仮定します。
>>> This line edited by hand <<<
2. 「編集」 「現在のマークを解決済に変更」を選択します。このメニュー項目は、相違行に解決済みのマークを付けます。これで、相違はすべて解決されたことになります。
「ファイルマージ」ウィンドウの左上のステータス行に、すべての相違が解決されたことが示されます。
3. 自動マージによる相違の解決が適切であるかどうかを確認します。下矢印ボタンを使用することによって、相違を順にたどることができます。
最後の相違は、
file_2
にだけ追加されている 1 行です。 ファイルマージツールは、file_1
に追加されていた 1 行 (3 番目の相違) について行われたのと同様に、この行をマージ版に取りんでいます。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |