FAQ

今日も「社内」のどこかで東陽テクニカ2

PERFORCE

ID.014

Q. 変更を取り消す方法

A.


簡潔に言えば、当該ファイルにおいて有効となる最新リビジョンに同期し、新 しいバージョンとしてそのファイルをサブミットすることになります。簡単な ものから複雑なものまで、以下に 3つのシナリオを列挙します。:
ごく最近のチェンジリスト(編集目的のみ)を取り消す

チェンジリスト 1000 を誤ってサブミットしたとします。チェンジリスト 1000 の内容は次のとおりです。
Change 1000 by trudi@spice on 1999/07/27 11:47:04

Webページを改修した。

Affected files ...

... //depot/foo#9 edit
... //depot/bar#3 edit
... //depot/ola#4 edit


チェンジリスト 1000 では編集しか行っておらず、追加も削除もしていないこ とに注意してください。さらに、この単純なシナリオでは、チェンジリスト 1000 がサブミットされた直後であると仮定します。サブミットされた後、このクラ イアント・ワークスペース内では何の変更も行われておらず、またチェンジリ スト 1000 の中で変更されたファイルに対して、引き続いて誰もサブミットを 行っていないと仮定します。

チェンジリスト 1000 を取り消すためにしなければならないことは、次のとお りです。:
  • p4 sync @999
  • p4 edit //depot/foo //depot/bar //depot/ola
  • p4 sync
  • p4 resolve -ay
  • p4 submit
  • これらのコマンドが行っていることを、詳しく説明します。:
  • チェンジリスト 1000 で影響を受けたファイルについて、戻したいリ ビジョンに同期します。-- つまりそれは、チェンジリスト 1000 をサブミ ットする前のファイル・リビジョンになります。
  • これらのファイルを、編集目的の作業状態にします。
  • 最新リビジョンに同期します。作業中のファイルは変更されず、衝突 解決がスケジュールされるだけです。
  • "yours を承諾" でファイルを衝突することによって、クライアント・ ワークスペースのファイルの内容は変更されません。
  • 戻したかったリビジョンが、最新リビジョンとしてサブミットされま す。

  • 古いチェンジリスト(編集目的のみ)を取り消す

    このシナリオでは、チェンジリスト 1000 は少し以前にサブミットされました。 その後、当該ファイルに対して、さまざまな正しい編集がサブミットされてい ます。このケースでは、当該ファイルに対して引き続き行われている変更を考 慮しなければならない(チェンジリスト 1000 における変更だけを取り消し、 続くそれ以外の変更は取り消さないかもしれない)ため、前のシナリオより複 雑です。前のシナリオと同様、チェンジリスト 1000 は編集目的のファイルだ けを含み、追加および削除はないものとします

    古いチェンジリストを取り消す際、使用するクライアント・ワークスペースに は、ほかに作業状態になったファイルがないようにすることをお勧めします。 (p4 opened を実行することによって、現在のクライアント・ワークスペース で作業状態のファイルがあるかどうかを確認できます。)このシナリオでチェ ンジリスト 1000 を取り消すには、次のようにします。:
  • p4 sync @999
  • p4 edit //depot/foo //depot/bar //depot/ola
  • p4 sync @1000
  • p4 resolve -ay
  • p4 sync
  • p4 resolve
  • p4 submit


  • 説明:
  • クライアント・ワークスペースを同期して、ファイルがチェンジリスト 1000 より前の状態になるようにします。
  • チェンジリスト 1000 で影響を受けたファイルを、編集目的の作業状態に します。
  • クライアント・ワークスペースを同期して、ファイルがチェンジ リスト 1000 のときの状態になるようにします。作業状態になったファイルは 変更されず、衝突解決がスケジュールされるだけです。
  • "yours を承諾" でファイルを衝突することによって、クライアント・ワー クスペースのファイルの内容は変更されません。
  • クライアント・ワークスペースを最新リビジョンに同期します。作業状態 になったファイルは変更されず、再び衝突解決がスケジュールされます。
  • クライアント・ワークスペース内で作業状態のファイルに対して、チェン ジリスト 1000 以降に行われたすべての変更を対話形式でマージすることがで きます。つまり、適切な編集をマージして戻すことになります。それぞれのフ ァイルに対して、"マージ結果を承諾" で衝突解決します。(もし、コンフリク トしている箇所があれば、初めにマージ結果を編集しなければなりません。コ ンフリクトとは、チェンジリスト 1000 によって変更された箇所が、継続する チェンジによっても別の内容で変更されたことを示します。)
  • 変更したリビジョンを、最新リビジョンとしてサブミットします。

  • 編集同様、追加および削除目的のチェンジリストを取り消す

    もし、間違ったチェンジリストの中に追加または削除されたファイルがあった 場合、どうすればよいでしょうか。ファイルが追加されていればそれを削除し、 削除されていれば追加するよう、元に戻すための新しいチェンジリストをサブ ミットします。最後のシナリオでは、チェンジリスト 1000 が次のように追加 と削除と編集を含んでいると仮定します。:
    Change 1000 by trudi@spice on 1999/07/27 11:47:04

    RevampのWebページ。

    Affected files ...

    ... //depot/foo#1 add
    ... //depot/bar#3 delete
    ... //depot/ola#4 edit


    このシナリオにおいてチェンジリスト 1000 を取り消すには、次の手順を使用 します。(もし、使用中の PERFORCE がリリース 99.1 以降でないならば、後 述の特別な手順をご覧ください。)
  • p4 sync @999
  • p4 edit //depot/ola
  • p4 add //depot/bar
  • p4 sync @1000
  • p4 resolve -ay
  • p4 sync
  • p4 resolve
  • p4 delete //depot/foo
  • p4 submit


  • 説明:
  • クライアント・ワークスペースを同期して、ファイルがチェンジリスト 1000 より前の状態になるようにします。
  • 編集されたファイルを、編集目的の作業状態にします。
  • 削除されたファイルを、追加目的の作業状態にします。
  • クライアント・ワークスペースを同期して、ファイルがチェンジリスト 1000 のときの状態になるようにします。作業状態になったファイルは変更され ません。編集目的で作業状態にされたファイルに対して、衝突解決がスケジュー ルされます。
  • //depot/ola を "yours を承諾" でファイルを衝突することによって、当 該ファイルの内容は変更されません。
  • クライアント・ワークスペースを最新リビジョンに同期します。作業状態 になったファイルは変更されず、再び衝突解決がスケジュールされます。
  • チェンジリスト 1000 の後、//depot/ola 対して行われたすべての変更を 対話形式でマージすることができます。
  • チェンジリスト 1000 で追加されたファイルを、削除目的で作業状態にし ます。
  • 変更されたファイルを最新リビジョンとしてサブミットします。


  • 99.1 より前の特別な手順:
    追加および削除目的のチェンジリストを編集目的と同様に取り消す

    上記のシナリオは、以前の p4 add コマンドが持つ制限により、リリース 99. 1 より前の PERFORCE では動作しません。もし、PERFORCE を現在のリリースに アップグレードしていないならば、上記に示したのと同じようにチェンジリス トを取り消すために、次に示すコマンド手順を実行しなければならないかもし れません。:
  • p4 sync @999
  • p4 edit //depot/ola
  • p4 flush @1000
  • p4 resolve -ay
  • p4 flush
  • p4 resolve
  • p4 delete //depot/foo
  • p4 add //depot/bar
  • p4 submit
  • p4 flush @999
  • p4 sync


  • 説明:
  • クライアント・ワークスペースを同期して、ファイルがチェンジリスト 1000 より前の状態になるようにします。
  • 編集されたファイルを編集目的で作業状態にします。
  • p4 flush コマンドを実行します。このコマンドは、実際にはクライアント・ ワークスペースのファイルを変更しません。PERFORCE に対して、現在のクライ アント・ワークスペースがチェンジリスト 1000 を同期した状態であるかのよ うに思わせ、//depot/bar ファイルを削除しません。
  • //depot/ola を "yours を承諾" でファイルを衝突することによって、当 該ファイルの内容は変更されません。
  • すでに削除されたすべてのファイルを削除することなく、PERFORCE に対 して、最新リビジョンを同期しているかのように思わせます。
  • 前回のシナリオと同様、チェンジリスト 1000 の後に行われたすべての変 更を、編集目的で作業状態のファイルに対して対話形式でマージすることがで きます。
  • 前回に追加されたファイルを、削除目的で作業状態にします。
  • 前回に削除されたファイルを、追加目的で作業状態にします。(これが、p4 flush を実行した理由です。これにより、クライアント・ワークスペースにあ るこのファイルは残ります。)
  • 変更されたファイルを最新リビジョンとしてサブミットします。
  • PERFORCE に対して、クライアント・ワークスペースがチェンジリスト 999 に同期されているかのように思わせます。(最初に p4 flush を実行する前の、 本来あるべき姿です。)これは、次のステップで正しいファイルを同期するこ とを確実にするためのものです。
  • クライアント・ワークスペースを、現在のディポ・ファイルに同期します。

  • << PERFORCEに関するFAQ一覧へ戻る