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 つのファイルだけが読み込まれ、それらのファイルの対応する行に相違がある場合は、それぞれのファイルの該当する行にグリフが表示されます。

入力ファイルが 3 つの場合

マージする 2 つのファイルを読み込むときに、3 つ目のファイルとして、それら 2 つのファイルの祖先ファイルを指定できます。祖先ファイルは、マージする 2 つのファイルより古いバージョンのファイルです。祖先ファイルを指定すると、そのファイルが、マージする 2 つのファイルを比較する基準として使用されます。また、祖先ファイルを指定することによって、自動マージを行うことができます。ファイルマージは、祖先ファイルから派生したファイル、すなわち、子孫ファイル内の、祖先と異なるすべての行にマークを付け、それら 3 つのファイルに基づいてマージファイルを作成します。

マージする 2 つのファイル内の、祖先ファイルと異なる行は、変更バーのマークが付けられ、いくつかの色を使用して強調表示されます。

ファイルマージツールへのファイルの読み込み

衝突解決によってファイルマージツールにファイルが自動的に読み込まれなかった場合は、「ファイル」 「開く」を選択するか、「開く」ボタンをクリックすることによって、手動でファイルを読み込むことができます。図 6-3 は、「ファイルを開く」ダイアログボックスを示しています。


図 6-3   ファイルマージツールにおける「ファイルを開く」ダイアログボックス

「ファイルを開く」ダイアログボックスには、表 6-1 に示すフィールドがあります。

表 6-1   ファイルマージツールの「ファイルを開く」ダイアログボックスのフィールド
テキストボックス 説明
ディレクトリ Sun WorkShop またはコマンド行から引数を付けずにファイルマージツールを起動すると、現在の作業用ディレクトリが表示されます。このフィールドは編集可能です。ファイルマージツールは、このウィンドウ内のファイル名を現在の作業用ディレクトリを基準にした相対パス名として解釈します。このため、サブディレクトリ内のファイルは subdir/filename の形式、親ディレクトリ内のファイルは ../filename の形式で指定できます。スラッシュ (/) で始まるファイル名は、現在の作業用ディレクトリを基準にした相対パス名ではなく、フルパス名として解釈されます。
左のファイル 左側のテキスト区画 (子区画) に表示するファイルを指定します。
右のファイル 右側のテキスト区画 (親区画) に表示するファイルを指定します。
祖先ファイル 祖先ファイル名を指定します。このテキストボックスにファイル名を入力した場合、ファイルマージツールは、マージされる 2 つのファイルとそのファイルを比較し、2 つのファイル内の、祖先と内容が異なる行を特定します。自動マージは祖先ファイルに基づいて実行されますが、祖先ファイルそのものは「ファイルマージ」ウィンドウに表示されません。祖先ファイル名が省略された場合は、左と右のファイルだけが比較され、その 2 つのファイルからマージ版を作成します。祖先ファイルなしで、自動マージを行うことはできません。
出力ファイル マージ結果の出力ファイルの名前を指定します。省略した場合は、filemerge.out という名前で、現在の作業用ディレクトリに出力ファイルを書き込みます。


マージするファイルが読み込まれた「ファイルマージ」ウィンドウの各テキスト区画の上部には、それぞれ適切なファイル名 (左のファイル名、右のファイル名、出力ファイル名) が表示されます。祖先ファイルを指定した場合は、ウィンドウのヘッダー部分にそのファイル名が表示されます。

相違の解決

相違の解決では、元のデルタ (親または子) のいずれか一方の行をそのまま採用することも、マージ版を手作業で編集することもできます。適切な変更が行われたことを、コントロールパネルのボタンをクリックすることによって示すと、現在注目している相違点は「解決された」ことになります。相違点が解決されると、相違箇所のグリフは白抜きのグリフに変わります。ファイルマージツールは、自動的に次の相違箇所に進むか (「自動的に進む」属性がオンの場合)、指定された相違箇所に進みます。

下部のテキスト区画では、相違箇所が空白行で示されます。相違を解決するには、次のいずれかの操作を行います。

衝突状態にない相違行 (すなわち、一方のファイルでだけ変更されている行) を自動的にマージ版に取り込むように設定する場合は、「オプション」 「自動マージ」を選択します。そうすると、ファイルマージツールの起動時に、解決されているすべての行が自動的にマージ版に取り込まれます。詳細は、「自動マージの使用方法」を参照してください。

ファイル間の相違を解決する手順は次のとおりです。

1. 処理する相違箇所を決めます。

2. 適切な行を選択して、受け入れます。

3. 「次」ボタンをクリックして、ファイルの次の相違箇所に移動します。

別の相違箇所に移動するには、次のいずれかの操作をします。
加えた変更を放棄して最初からやり直す場合は「再読み込み」ボタンをクリックします。相違の解決がすべて放棄され、相違を解決する前のファイルが読み込まれます。

4. 相違をすべて解決したら、「保存」をクリックします。

自動マージの使用方法

共通の祖先ファイルを読み込むことによって、自動的に相違を解決できることがあります。自動マージは、次の規則に基づいて相違を解決します。

自動マージ規則のまとめ

表 6-2 に、自動マージのアルゴリズムを示します。表で使用されている用語は、それぞれ次のことを意味します。

変更の取り消し

「編集」 「元に戻す」を使用して変更を取り消すことができます。

「ファイルマージ」ウィンドウの「再読み込み」ボタンを使用して相違を解決するためのすべての編集内容を放棄し、ディスクからファイルを読み込むこともできます。「自動マージ」オプションが選択されている場合は、衝突状態にない相違はすべて下部の区画に表示されます。

ファイルマージツールのオプション

次の 2 つの場所で相違解決とファイルマージツールの動作を変更できます。

相違解決オプション

「ツール属性」ダイアログボックスの「衝突解決」タブ (図 6-4) で、「トランザクション」ウィンドウの「衝突解決」区画の動作を変更できます。「衝突解決」タブには、表 6-3 に示す属性があります。


図 6-4   「ツール属性」ダイアログボックスの「衝突解決」タブ

表 6-3   相違解決ツール属性  
属性 説明
ファイルマージの自動起動 相違解決のトランザクション区画が選択されたとき自動的にファイルマージツールを起動します。
自動的に進む 現在のファイルの相違が解決された後、リストの次のファイルを自動的にファイルマージツールに読み込みます。
チェックインコメントのプロンプト ファイルの相違を解決した後のチェックインでは自動的にデフォルトのコメントが追加されます。この属性を有効にするとデフォルトのコメントに追記する追加コメントの入力が求められます。
既存のマージウィンドウを使用 この属性が有効な場合は、以降に続く衝突解決作業に実行中のファイルマージツールを再利用します。
自動保存 (未解決の相違がなかった場合) この属性が有効でファイル内のすべての変更が自動マージ可能な場合は、ファイルが自動的に保存され、チェックインされます。


「ファイルマージ」ウィンドウの表示オプション

「ファイルマージ」ウィンドウの「オプション」メニューには、次の表に示すオプションが含まれています。このメニューの最初の 5 つのオプションはトグル方式で、選択するたびに有効 / 無効が切り替わります。有効にすると、オプションの左側に小さなボックスが表示されます。

表 6-4 は、「ファイルマージ」ウィンドウの表示オプションをまとめています。

表 6-4   「ファイルマージ」ウィンドウの表示オプション  
オプション 説明
自動マージ 衝突状態にない相違を自動的に解決し、マージ結果区画にマージ版を作成します。デフォルトは有効です。
スクロール -- 連動して テキスト区画のスクロールの同期を取るかどうかを設定します。スクロールの同期を取ると、各区画に対応する行が並んで表示されます。デフォルトは有効です。
行番号表示 左右の区画内に行番号を表示します。
行末表示 左右の区画内の各行の末尾に小さな黒いボックスを表示します。
相違ナビゲータ表示 左右の区画の間に相違ナビゲータを表示します。相違ナビゲータは、2 つのファイル間の相違箇所を色付きの線で表示します。相違ナビゲータのいずれかの側のスライドボックスをクリックすると、そのボックスがある方のファイルがスクロールします。上向きまたは下向きの矢印をクリックすると、両方のファイル内を同じ距離、移動します。
タブ表示 タブの設定をカスタマイズできます。次の 2 つのオプションがあります。

制御文字 (^I) 各タブ位置に^I 制御文字を表示します。デフォルトはオンです。

スペース タブの空白文字数を 1、2、3、4、6、8、10、12、16 のいずれかの文字数に設定できます。デフォルトは 8 文字です。
相違オプション 相違の動作をカスタマイズできます。次の 3 つのオプションがあります。

行末のスペースを無視 相違行の検出で行の末尾の空白を無視します。デフォルトは無効です。

すべてのスペースを無視 相違行の検出で行の途中および末尾の空白を無視します。デフォルトは無効です。

大文字小文字を区別しない 相違行の検出で英大文字と小文字を同一視します。デフォルトは無効です。


ファイルのマージ例

ここでは、共通の祖先を持つ 2 つのファイルのマージ例を紹介します。子孫ファイルの名前は file_1file_2、祖先ファイルの名前は matriarch です。matriarch を編集することによって、file_1file_2 が作成されています。子孫ファイルでは、行の削除や追加、行の一部変更などの、さまざまな変更が行われています。

下記のマージ例の各行を見ると、変更が加えられているかどうか、また変更が加えられている場合は、どのように変更されているかが分かります。コード例 6-1 に示すように、祖先ファイルはわずか 12 行の大きさです。

デフォルトでは、読み込んだファイルに行番号は表示されませんが、分かりやすくするために、この例では行番号を表示しています。

コード例 6-1   祖先ファイル (matriarch)

 
1 This line is deleted in file_1
2 This line is in all three files
3 This line is deleted in file_2
4 This line is in all three files
5 This line is in all three files
6 This line is changed in descendants
7 This line is in all three files
8 This line is changed in descendants
9 This line is in all three files
10 This line is changed in file_2
11 This line is in all three files
12 This line is in all three files

コード例 6-2 は、file_1 の内容を示しています。このファイルと祖先ファイル matriarch との相違は次のとおりです。

コード例 6-3 は、file_2 の内容を示しています。このファイルと祖先ファイル matriarch との相違は次のとおりです。

コード例 6-3   子孫ファイル (file_2)

 
1 This line is deleted in file_1
2 This line is in all three files
4 This line is in all three files
5 This line is in all three files
6 This line is altered in file_2 from matriarch
7 This line is in all three files
8 #&# Changed in file_1 and file_2 #&#
9 This line is in all three files
10 ### 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_1file_2 のマージ結果

図 6-6   自動マージ後の子区画の file_1 の内容
図 6-7   自動マージ後の親区画の file_2 の内容

各グリフの意味は次のとおりです。縦棒 (|) は、その行に変更があったことを意味します。正符号 (+) はその行が追加されていること、負符号 (-) はその行が削除されていることを意味します。未解決の行は塗りつぶしのグリフ、解決済みの行は白抜きのグリフで示されます。カラーマップが使い切られていない限り、これらのグリフは通常とは異なる色で強調表示されます。デフォルトでは、赤色が変更、緑色が削除、黄色が追加を意味します。

未解決の相違 (上記の例では行番号 6 の行) には、縦棒のマークが付きます。

相違を確認する

ファイルマージツールでは、未解決の相違 (上記の例の file_1file_2 の行番号 6 の行) が強調表示されます。自動マージで相違を解決すると、その間のファイルの最新状態が「マージ後の結果」区画に表示されます。

次の相違に進むには、その操作をする区画の上の下矢印ボタンをクリックするか、「ナビゲート」 「次」 「相違」を選択します。次の相違が現在の相違になります。

下矢印ボタンを使用することによって、相違を順にたどることができます。

自動マージでは、一方のファイルだけで加えられた変更を残します。自動マージによって相違が解決されなかった場合は (相違に関係する行には、通常とは異なる色の塗りつぶされたグリフが表示されます)、手作業でその相違を解決する必要があります。縦棒は、その行が追加や削除をされたものではなく、変更されていることを示します。2 つのファイルの同じ行に変更が加えられていて、その変更内容が異なる場合、自動マージはその行をマージ版に取り込みません。そうした行は、どちらの行を採用するかをユーザー自身で決定する必要があります。

相違を解決する

上記のマージ例の相違は、次のいずれかの方法で解決できます。

出力ファイルを編集する

出力ファイルを編集する手順は次のとおりです。

1. マージ版のある下部のテキスト区画内の、編集する行位置にポインタを置きます。

この例では、次の行を入力すると仮定します。

>>> This line edited by hand <<<

2. 「編集」 「現在のマークを解決済に変更」を選択します。

このメニュー項目は、相違行に解決済みのマークを付けます。これで、相違はすべて解決されたことになります。

「ファイルマージ」ウィンドウの左上のステータス行に、すべての相違が解決されたことが示されます。

3. 自動マージによる相違の解決が適切であるかどうかを確認します。

下矢印ボタンを使用することによって、相違を順にたどることができます。

最後の相違は、file_2 にだけ追加されている 1 行です。 ファイルマージツールは、file_1 に追加されていた 1 行 (3 番目の相違) について行われたのと同様に、この行をマージ版に取りんでいます。


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引