パッチの操作

パッチを使用すると、開発者は、作業をリポジトリーに保管せずに共有できます。 これは、リポジトリーを共有するけれど、リポジトリーの書き込みアクセス権を持っていないプロジェクトに貢献したい開発者の手助けとなります。 この状況において、開発者は、パッチを作成して、書き込みアクセス権を持っている開発者にそれを E メールするか、プロジェクトで使用するバグ報告システムのバグに、それを付加することができます。 書き込みアクセス権を持っている開発者は、それ以降パッチをプロジェクトに適用して、変更をコミットすることができます。

CVS プロジェクトからパッチを作成するには、次のようにします。

  1. パッチに組み込まれている修正を含むリソースを選択します。 「パッチの作成」ウィザードがデフォルト・モードで実行されると、複数プロジェクト・パッチの生成方法が把握されているため、複数プロジェクトにある、あらゆるレベルのリソースを選択できます。 パッチはまた、生成される同じファイル改訂に適用する必要があるので、 パッチが同じリソース・ラインナップに適用されていることを確かめる処理が必要です (これを最も簡単に行うには、バージョンの上部にパッチを作成することです)。
  2. ポップアップ・メニューから、「チーム」>「パッチの作成 ...」を選択します。 「パッチの作成」ウィザードが開きます。
  3. パッチを以下のどこに保存するかを選択します。
    1. クリップボードにコピー 」- パッチをクリップボードに置くので、 E メールのようなテキスト・エディターに貼り付けることができます。
    2. ファイル・システムへ保存」- ローカル・ファイル・システムの指定したファイルにパッチを置きます。
    3. ワークスペースに保存 」- 既存のワークベンチ・プロジェクトの中で、指定したファイルにパッチを置きます。
    小さなパッチの場合、クリップボードを使用してパッチを転送するのが良い方法です。 しかし、ほとんどの場合は、最良のオプションはローカル・ファイル・システムを使用することです。
  4. 変更ペインに表示されるリソース・ツリーを展開することにより、パッチ選択のプレビューおよび微調整が可能です。 検査済みの要素のみがパッチに組み込まれます。 「次へ」をクリックして、パッチを生成する方法を構成します。
  5. 次のパッチの構成方法を選択します。
    1. Diff 出力フォーマット - いくつかの共通 diff 出力フォーマットを選択可能にします。 Unified は、Eclipse を含む多くのパッチ・アプリケーション・ツールで使用されるフォーマットです。 コンテキスト diff および統合 diff で使用されるフォーマットにより、ハンク (パッチ用語) に付けられた行番号が正しくない場合でも、パッチを適用することができます。 この場合、パッチを適用すると、アルゴリズムにより、ハンク用に指定されたコンテキストに一致する行セットを求めて順方向および逆方向に走査されます。
    2. パッチのルート - パッチのルートにするレベルを指定できます。 選択項目は、ワークスペースプロジェクト、および選択 です。

      ワークスペース では、複数プロジェクトからのリソースをパッチに組み込むことが可能であり、これがデフォルトのオプションです。 ワークスペース・パッチは、ワークスペース内の全てのリソースに適用可能であり、「パッチの適用」ウィザードでパッチの適用が必要なリソースを確認できるよう、十分な情報が含まれています。

      プロジェクト・パッチでは、プロジェクト・レベルがルートになるため、1 つのプロジェクトからのリソースのみが含まれていて、同一のプロジェクトに適用する必要があります。

      選択 パッチは、選択されたリソースがルートになり、同一のリソースに適用する必要があります。
  6. 終了」をクリックします。
  7. 必要に応じて、パッチされるプロジェクト用にパッチを転送します。

パッチを適用するには、次のようにします。

  1. パッチが生成されたリソースを選択します。 このリソースには、パッチが生成されたラインナップと同じファイル改訂を含む必要があります。
  2. ポップアップ・メニューから「チーム」>「パッチの適用...」の順に選択します。 「パッチの適用」ウィザードが開きます。

    別の方法として、パッチの内容をクリップボードにコピーした後、「編集」>「貼り付け」を選択して「パッケージ・エクスプローラー」ビューの中に直接貼り付けることもできます。 この場合は、次のステップを省略できます。
  3. 以下のようにパッチ検出場所を指示します。
    1. ファイル - パッチはローカル・ファイル・システムのファイルにあります。 ファイルへの絶対パスを入力するか、「参照 ...」ボタンを使用して、ファイルを探します。
    2. クリップボード - パッチはクリップボードにあります。 警告: ファイルをベースにしたパッチを使用するのが安全です。 クリップボードが使用されていて、異なるプラットフォーム (Linux と Windows) で パッチが生成された場合は、行編集が正確に処理されないことがあります。
    3. URL - パッチは特定の URL の下にあります。 警告: 有効な URL を入力したこと、およびそこに適切なパッチが含まれることを確認してください。 これが満たされない場合、適用できません。 なお、URL からパッチを直接適用する際にはいくらか時間がかかることがあります。
    4. ワークスペース - パッチはワークスペース内のどこかに保存されます。
    次へ」をクリックして、パッチの適用結果を見ます。
  4. オプションのステップ: このステップは、プロジェクトまたは選択のレベルにルートを設定したパッチの場合にのみ該当します。ワークスペースがルートであるパッチの場合は、「パッチ・プレビュー (Patch Preview)」ページに自動的に進みます。 「パッチ・ターゲットの指定」ページで、パッチのルートにするリソースを選択する必要があります。
  5. 「パッチ・プレビュー (patch preview)」ページには、パッチがワークスペースのファイルに正常に適用できたかどうかが示されます。 上部ペインには、パッチに含まれている変更のリストが表示されます。 上部ペインには 2 つのタイプの項目があります。それは、ファイル変更と、一致しないパッチ・セグメント (パッチ用語では「ハンク」) です。
    1. パッチ・セグメントの 1 つ以上を自動的にファイルに適用できる場合、そのファイルは 着信変更インディケーターで示されます。ファイルをダブルクリックすると、変更を調べることができます。
    2. 1 つ以上のハンクを自動的に適用できない場合、ハンク項目はファイルの子として上部ペインに表示され、 赤い感嘆符は、パッチあるいはハンクに問題があることを示します。 ファイルをダブルクリックすると、ハンクを調べることができます。それから、右側ペインのハンクを左側のファイルに手動で 適用できます。左側ペインから保存すると、上部ペインにある親ファイル項目は更新されますが、 ディスク上のファイルは変更されません。ディスク上のファイルは、「終了」が押されるまで変更されません。完全パッチを正常に適用するためには、問題 (赤い感嘆符) を削除する必要があります。それには、パッチ・セグメントを手動で適用するか、 コンテキスト・メニューから「削除 」を選択することにより操作からパッチ・セグメントを除外するか、またはこのウィザード・ページで オプション (以下の『オプション』を参照) を調整します。
  6. すべてが良い場合は、「終了」をクリックしてパッチを適用します。 ここでワークスペースには、パッチで修正された各ファイルの発信変更を含みます。

ローカル・コンテンツとの同期化により、パッチを適用することができます。

パッチとの同期を取るには、次のようにします。

  1. 「チーム同期化」パースペクティブから、「同期化」 ボタンのドロップダウンから「同期化...」アクションを選択します。
  2. 可能な同期化タイプのリストから「パッチと同期化」を選択して、「次へ」をクリックします。
  3. 以下のようにパッチ検出場所を指示します。
    1. ファイル - パッチはローカル・ファイル・システムのファイルにあります。 ファイルへの絶対パスを入力するか、「参照 ...」ボタンを使用して、ファイルを探します。
    2. クリップボード - パッチはクリップボードにあります。 警告: ファイルをベースにしたパッチを使用するのが安全です。 クリップボードが使用されていて、異なるプラットフォーム (Linux と Windows) で パッチが生成された場合は、行編集が正確に処理されないことがあります。
    3. URL - パッチは特定の URL の下にあります。 警告: 有効な URL を入力したこと、およびそこに適切なパッチが含まれることを確認してください。 これが満たされない場合、パッチを適用できません。 なお、URL からパッチを直接適用する際にはいくらか時間がかかることがあります。
    4. ワークスペース - パッチはワークスペース内のどこかに保存されます。
    次へ」をクリックして、パッチの適用結果を見ます。
  4. オプションのステップ: このステップは、プロジェクトまたは選択のレベルにルートを設定したパッチの場合にのみ該当します。ワークスペースがルートであるパッチの場合は、「パッチ・プレビュー (Patch Preview)」ページに自動的に進みます。 「パッチ・ターゲットの指定」ページで、パッチのルートにするリソースを選択する必要があります。
  5. オプションのステップ: このステップは、アクセス不能なプロジェクトを参照するパッチの場合にのみ該当します。パッチのすべてのプロジェクトがワークスペースに存在し、開いている場合には、このページがスキップされます。 「アクセス不能プロジェクト」ページで、閉じている任意のプロジェクトを開くことができます。 また、存在しないプロジェクトについての詳細情報が表示されます。 閉じている (またはワークスペースに存在しない) プロジェクトにパッチを適用することはできません。
  6. 最後のページで「終了」をクリックすると、「同期化」ビューの中でパッチの変更をプレビューできます。

パッチを適用するオプション

正常に一致するパッチ・ファイルを入手するために、以下のオプションがあります。
  1. 「パッチの適用」ウィザードの最初のページに戻って、パッチを適用する必要のある正しいリソースを選択します。
  2. パッチ・ファイルに保管されているパス名の共通接頭部が、現行ワークスペースのパス名に一致しない場合は、 先行するパス名セグメントを無視 することができます。
  3. 空白の無視 ボタンを使用して、パッチ・ファイルとワークスペース内のファイルとの空白の違いとは関係なく マッチング処理を行います。
  4. ファジー係数 (パッチ用語) を調整します。 この係数は、無視するハンク・コンテキスト行数の分量を示します。ファジー係数の値がゼロの場合、すべての行が一致する必要があります。ファジー要素の値がゼロより大きい、例えば 2 である場合は、ハンクの前にある最初の 2 つのコンテキスト行と、ハンクの後にある最後の 2 つのコンテキスト行が無視されます。 「予測」をクリックして、ハンクが一致する可能性を最も高くするファジー係数を計算してください。
  5. ワークスペースに既に適用されているパッチ・ファイルにパッチの反転オプションを使用してください。 このオプションは、パッチを元に戻したり、やり直すのにも役立ちます。
  6. ワークスペース・パッチの場合、ワークスペース内の別のプロジェクトを選択し、パッチの変更を適用できます。 これを行うには、上部ペインでプロジェクトを選択し、コンテキスト・メニューから「移動」を選択します。 これにより、ワークスペース内で使用可能な全てのプロジェクトがリストされたダイアログが起動されます。 プロジェクトを選択し、「OK」をクリックします。 パッチの変更が選択されたプロジェクトに適用されます。
  7. 除外の表示」オプションを使用して、 パッチに組み込まないように既に選択されているハンクを表示します。
  8. パッチとの同期を取る際、「同期化」ビューのプルダウン・メニューで上記のようなオプションを使用できます。 また、適用される変更についての追加情報を得るために、使用可能な複数のモデル間で切り替えることもできます。

関連概念
CVS によるチーム・プログラミング

関連タスク
リソースの比較
リポジトリーとの同期化

関連リファレンス
チーム CVS