ファイルとチェンジリストの管理

この章では、ファイル管理の方法およびチーム開発環境での作業方法を説明します。チーム開発環境では、同一のファイルを複数のユーザが操作するため、各ユーザによる変更の調整が必要な場合があります。

ファイルを管理する

ディポ(ファイル格納場所)内のファイルを変更するには、ファイルをチェンジリストで作業状態にし、変更についてのコメントを入力してチェンジリストをサブミットします。Perforceはチェンジリストに番号を割り当て、ユーザのファイルのリビジョン履歴を保存します。この方法によって、関連する変更をグループ化したり、だれがいつ、何のために変更したかを調べたりすることができます。ファイルの操作の基本的な手順を以下に示します。

タスク

解説

同期(ファイルをディポから取得する)

ディポから取得するファイルとディレクトリを指定して、p4 syncコマンドを発行します。クライアントビューにマッピングされているファイルのみ、同期が可能です。

ファイルをディポに追加する

  1. ファイルをワークスペースで作成します。

  2. ファイルをチェンジリストで追加目的の作業状態にします(p4 add)。

  3. チェンジリストをサブミットします(p4 submit)。

ファイルを編集して変更をチェックインする

  1. 必要に応じて、目的のファイルリビジョンをワークスペースに同期します(p4 sync)。

  2. ファイルをチェンジリストで編集目的の作業状態にします(p4 edit)。

  3. ファイルを変更します。

  4. チェンジリストをサブミットします(p4 submit)。変更を破棄するには、p4 revertコマンドを発行します。

ファイルをディポから削除する

  1. ファイルをチェンジリストで削除目的の作業状態にします(p4 delete)。ファイルがワークスペースから削除されます。

  2. チェンジリストをサブミットします(p4 submit)。ファイルはディポから削除されます。

変更を破棄する

ファイルまたはファイルが作業状態になっているチェンジリストを元に戻します。元に戻す操作は、作業状態のファイルに次のように影響します。

追加: 影響なし - ファイルはワークスペースに残ります。

編集: 作業状態にしたリビジョンが再度ディポから同期され、ワークスペースにあるファイルに加えた変更は上書きされます。

削除: ファイルは再度ワークスペースと同期されます。

ディポにおけるファイルの追加、削除、更新は、そのファイルが作業状態にされている作業中チェンジリストを正常にサブミットした場合にのみ行われます。1つのチェンジリストには追加目的、編集目的、削除目的の作業状態のファイルを混在させることができます。

コマンドライン上でのファイルの指定に使用する構文について詳しくは、コマンドラインでファイル名を指定するを参照してください。以降のセクションでは、ファイルの操作について詳しく説明します。

ファイルの同期(取得)

ファイルをディポからクライアントワークスペースに取得するには、p4 syncコマンドを発行します。自分のクライアントビューに存在しないファイルを同期させることはできません。クライアントビューの指定について詳しくは、ワークスペースビューを限定するを参照してください。

Example 15. ディポからクライアントワークスペースへファイルをコピーする。

以下のコマンドにより、クライアントビューにあるすべてのファイルの最新リビジョンがディポからワークスペースに取得されます。ファイルが同期されると、コマンド出力にリスト表示されます。

C:\bruno_ws>p4 sync
//depot/dev/main/bin/bin.linux24x86/readme.txt#1 - added as c:\bruno_ws\dev\main\bin\bin.linux24x86\readme.txt
//depot/dev/main/bin/bin.ntx86/glut32.dll#1 - added as c:\bruno_ws\dev\main\bin\bin.ntx86\glut32.dll
//depot/dev/main/bin/bin.ntx86/jamgraph.exe#2 - added as c:\bruno_ws\dev\main\bin\bin.ntx86\jamgraph.exe
[...]

p4 syncコマンドにより、クライアントワークスペース内のファイルが追加、更新、または削除され、ワークスペースの内容がディポと同期されます。あるファイルがディポ内の特定のサブディレクトリに存在し、そのディレクトリがクライアントワークスペースに存在しない場合、そのディレクトリはファイルを同期するときにクライアントワークスペースに作成されます。ファイルがディポから削除されている場合、p4 syncコマンド実行時にクライアントワークスペースからも削除されます。

ディポ内のファイルの最新リビジョンより前のリビジョンを同期させるには、リビジョン指定子を使用します。例えば、複数リビジョンのあるJamfileの1番目のリビジョンと同期させるには、次のコマンドを発行します。

p4 sync //depot/dev/main/jam/Jamfile#1

詳細については、ファイルリビジョンを指定するを参照してください。

ファイルの集合またはディレクトリ全体を同期させるには、ワイルドカードを使用します。例えば、jamフォルダとその配下にあるすべてのファイルを同期させるには、次のコマンドを発行します。

p4 sync //depot/dev/main/jam/...

詳細については、Perforceのワイルドカードを参照してください。

Perforceサービスでは、ユーザが同期させたリビジョンを記録しています。効率化を図るため、Perforceはすでに同期済みのファイルリビジョンを再度同期しません。手動で(おそらく不用意に)削除したファイルを再度同期するには、p4 syncコマンドの発行時に-fオプションを指定してください。

ファイルを追加する

ファイルをディポに追加するには、ワークスペースでファイルを作成し、p4 addコマンドを発行します。p4 addコマンドにより、ファイルはデフォルト作業中チェンジリストでadd目的の作業状態になります。デフォルト作業中チェンジリストのサブミットが成功したとき、ファイルが追加されます。複数のファイルを追加目的の作業状態にするには、単一のp4 addコマンドでワイルドカードを使用します。ファイルを再帰的に追加するためにPerforceの「...」ワイルドカードを使用することはできません。

プラットフォーム固有の再帰的なファイル追加(サブディレクトリ内のファイル追加)について詳しくは、Perforce knowledge baseの「Adding a Directory Tree」を参照してください。

http://answers.perforce.com/articles/KB_Article/Adding-a-Directory-Tree

Example 16. ファイルをチェンジリストに追加する。

ブルーノはディポに追加する必要のある2、3のテキストファイルを作成しました。すべてのテキストファイルを一度に追加するために、ブルーノはp4 addコマンドの発行時に「*」ワイルドカードを使います。

C:\bruno_ws\dev\main\docs\manuals>p4 add *.txt
//depot/dev/main/docs/manuals/installnotes.txt#1 - opened for add
//depot/dev/main/docs/manuals/requirements.txt#1 - opened for add

これで、ブルーノがディポに追加したいファイルが彼のデフォルトチェンジリスト内で作業状態になりました。チェンジリストがサブミットされるとき、ファイルはディポに格納されます。

Example 17. チェンジリストをディポにサブミットする。

ブルーノはファイルをディポに追加する準備ができました。彼がp4 submitと入力すると、標準のテキストエディタに次のようなフォームが表示されます。

Change: new
Client: bruno_ws
User:   bruno
Status: new
Description:
        <enter description here>
Type:   public
Files:
    //depot/dev/main/docs/manuals/installnotes.txt   # add
    //depot/dev/main/docs/manuals/requirements.txt   # add

ブルーノは[Description:]フィールドの内容を変更し、自分が行ったファイル更新の説明を記述します。入力後、フォームを保存してエディタを終了すると、新しいファイルがディポに追加されます。

[Description:]フィールドにはコメントを入力しなければなりません。[Files:]フィールドからは行を削除しても構いません。このリストから削除されたファイルは、次のデフォルトチェンジリストに移動され、次回デフォルトチェンジリストをサブミットしたときにリスト表示されます。

ディポに存在しないディレクトリにファイルを追加すると、チェンジリストのサブミットが成功したときにディポのディレクトリが作成されます。

[Type:]フィールドをpublicからrestrictedに変更することにより、チェンジリストの可視性が制限できます。一般に、チェンジリストがrestrictedである場合、チェンジリスト内の1つ以上のファイルに対してlistアクセス権限を持つユーザに対してのみ、チェンジリストの説明が表示されます。

追加時にファイルのグループを無視する

開発プロセスでは、ディポにサブミットすべきでない無関係なコンテンツが作成されることがあります。開発中にコンパイラによってオブジェクトファイルや実行可能モジュールが生成され、テキストエディタやワードプロセッサによってバックアップファイルが生成され、さらにユーザ自身が習慣として作業メモを保存する場合もあります。

ファイル(またはファイルのグループ)をその追加時に無視するには、無視するファイルの仕様をリストにしたファイルを作成し、P4IGNORE環境変数がこのファイルを指すように設定します。

ファイルを追加する際、追加対象ファイルの完全なローカルパスおよびその親ディレクトリが、P4IGNOREファイルと照合されます。P4IGNOREファイルが存在する場合、その中のルールがリストに追加され、追加対象ファイルに最も近いP4IGNOREルールが優先的に適用されます。

P4IGNOREファイルの構文は、Perforceの構文と同じではありません。むしろ、他のバージョン化システムで使用されるものに似ています。ファイルはローカルシンタックスで指定されます。行頭の#文字はコメントを示し、行頭の!文字はそのファイル仕様を除外し、ワイルドカード*はサブ文字列に一致します。Perforceのワイルドカードの「...」は使用できません。

文字

P4IGNOREファイルでの意味

*

スラッシュを除くすべての文字に一致します。単一のディレクトリ内のみ照合します。大文字と小文字の区別はお使いのクライアントプラットフォームに依存します。

!

ファイル仕様を対象から除外します。

#

コメント文字。この行は無視されます。

Example 18. 追加時にファイルのグループを無視する。

ブルーノは自分のコードをディポにサブミットする前に単体テストを行いますが、ワークスペースを突き合わせて照合する際にオブジェクトファイルや生成済みの実行可能モジュールが誤って追加されないようにしたいと考えています。

彼はまず、P4IGNOREが正しいファイルを示すように設定します。

export P4IGNORE=.p4ignore

次に、以下のようなファイルを作成し、自分のワークスペースのルートに.p4ignoreとして保存します。

# Ignore .p4ignore files
.p4ignore
# Ignore object files, shared libraries, executables
*.dll
*.so
*.exe
*.o
# Ignore all text files except readme file
*.txt
!readme.txt

次回(p4 add *.*などの)コマンドを実行する際に、そのルールがワークスペース全体に適用されます。

P4IGNOREファイルをオーバーライド(または無視)するには、p4 addp4 reconcilep4 statusの各コマンドに-Iオプションを付けます。

ファイルを変更する

ファイルをedit目的で作業状態にするには、p4 editコマンドを発行します。ファイルを編集目的の作業状態にすると、Perforceはユーザのワークスペースのファイルに対し書き込み許可を与え、そのファイルをチェンジリストに追加します。ファイルがディポには存在してもユーザのワークスペースには存在しない場合、編集目的の作業状態にする前にそのファイルを同期させる必要があります。また、ファイルを編集する前に、編集目的の作業状態にしなければなりません。

Example 19. ファイルを編集目的で作業状態にする。

ブルーノはcommand.cに変更を加えたいので、そのファイルを同期させ、ファイルを編集目的で作業状態にします。

p4 sync //depot/dev/command.c
//depot/dev/command.c#8 - added as c:\bruno_ws\dev\command.c

p4 edit //depot/dev/command.c
//depot/dev/command.c#8 - opened for edit

そして、彼は任意のテキストエディタでファイルを編集します。編集後、彼は上記のようにp4 submitによりファイルをディポにサブミットします。

変更の破棄(元に戻す)

作業状態にしたファイルをチェンジリストから削除して、それまで行った変更を破棄するには、p4 revertコマンドを発行します。ファイルを元に戻すと、Perforceは最後にワークスペースに同期されたバージョンをリストアします。追加目的で作業状態にしたファイルを元に戻す場合、ファイルはチェンジリストからは削除されますがワークスペースからは削除されません。

Example 20. ファイルを元に戻す

ブルーノは結局、自分のテキストファイルを追加しないことにしました。

p4 revert *.txt
//depot/dev/main/docs/manuals/installnotes.txt#none - was add, abandoned
//depot/dev/main/docs/manuals/requirements.txt#none - was add, abandoned

実際にはファイルを元に戻さずに、元に戻す操作の結果をプレビューするには、p4 revertコマンドの発行時に-nオプションを指定します。

ファイルを削除する

ファイルをディポから削除するには、p4 deleteコマンドを発行して削除対象ファイルを作業状態にし、それらが作業状態にされているチェンジリストをサブミットします。ファイルをディポから削除しても以前のリビジョンは存在したままで、「削除済み」とマークされた新しい最新リビジョンが追加されます。したがってファイルの古いリビジョンを同期させることは依然として可能です。

p4 deleteコマンドを発行すると、ファイルはワークスペースからは削除されますがディポからは削除されません。削除目的で作業状態にされたファイルを復元すると、それらはワークスペースに復元されます。ファイルが作業状態にされたチェンジリストのサブミットが成功すると、ファイルはディポから削除されます。

Example 21. ファイルをディポから削除する

ブルーノは次のようにして、vendor.docをディポから削除します。

p4 delete //depot/dev/main/docs/manuals/vendor.doc
//depot/dev/main/docs/manuals/vendor.doc#1 - opened for delete

ファイルはただちにクライアントワークスペースから削除されますが、ブルーノがp4 submitコマンドを発行するまでディポからは削除されません。

チェンジリストの管理

ディポ内のファイルを変更するには、それらのファイルをチェンジリストで作業状態にし、ファイルを変更してからチェンジリストをサブミットします。チェンジリストには、ファイル、そのリビジョン番号、およびファイルに対して行われる操作のリストが含まれています。サブミットされていないチェンジリストは、作業中チェンジリストと呼ばれます。

チェンジリストのサブミットは、すべて行うか全く行わないかの操作になります。つまり、チェンジリスト内のすべてのファイルがディポで更新されるか、または、エラーが発生した場合にはどのファイルも一切更新されません。この方法により、複数のファイルに影響するコード変更が同時に行われるようになっています。

Perforceは、チェンジリストに番号を割り当てるほか、デフォルトチェンジリストを管理します。デフォルトチェンジリストにはサブミットの際に番号が付けられます。複数のチェンジリストを作成して作業を整理することができます。例えば、あるチェンジリストには新機能を実装するために変更されるファイルを入れ、別のチェンジリストにはバグ修正を含めることもできます。ファイルを作業状態にすると、コマンドラインで-cオプションを使用して既存のチェンジリスト番号を指定しない限り、そのファイルはデフォルトチェンジリストに置かれます。例えば、チェンジリスト番号4でファイルを編集し、サブミットするには、p4 edit -c 4 filenameを使用します。ファイルをデフォルトチェンジリストで作業状態にするには、-cオプションを省略します。

また、チェンジリストを保留して、ユーザ自身での使用または別のユーザによるレビューを目的として進行中の作業を一時的に保存しておくことも可能です。ファイルを保留することにより、ファイルを正式にディポにサブミットせずに、共有サービスに一時的にキャッシュすることができます。

他のユーザの操作内容によって、チェンジリストのサブミットの際に、Perforceサービスがチェンジリストの番号を付け替える場合があります。チェンジリストの番号が付け替えられた場合、元の番号が別のチェンジリストに割り当てられることはありません。

チェンジリストに対してファイルの追加または削除を行うコマンドを以下に示します。

  • p4 add

  • p4 delete

  • p4 edit

  • p4 integrate

  • p4 reopen

  • p4 revert

  • p4 shelve

  • p4 unshelve

番号付チェンジリストをサブミットするには、p4 submitコマンド発行時に-cオプションを指定します。デフォルトチェンジリストをサブミットするには、-cオプションを省略します。詳細については、『P4コマンドリファレンス』のp4 submitコマンドに関する説明を参照してください。

ファイルを1つのチェンジリストから別のチェンジリストに移動させるには、p4 reopen -c changenum filenamesコマンドを発行して、changenumに移動先のチェンジリストの番号を指定します。ファイルをデフォルトチェンジリストに移動させる場合は、p4 reopen -c default filenamesを使用します。

Note

並列サブミットを使用すると、パフォーマンスが大きく向上します。詳細については、『P4コマンドリファレンス』のp4 submitコマンドの説明を参照してください。

番号付チェンジリストの作成

番号付チェンジリストを作成するには、p4 changeコマンドを発行します。このコマンドによりチェンジリストフォームが表示されます。コメントを入力し、必要な変更を行ってからフォームを保存し、エディタを終了します。

デフォルトチェンジリストで作業状態になっているすべてのファイルが新しいチェンジリストに移動します。テキストエディタを終了すると、チェンジリストに番号が割り当てられます。ファイルをこのチェンジリストから削除すると、それらのファイルはデフォルトチェンジリストに戻ります。

Example 22. 複数のチェンジリストを使って作業する

ブルーノは2つのバグ修正を行っており、それぞれの修正を別のチェンジリストにサブミットする必要があります。そこで1番目の修正に対するファイルの最新リビジョンを同期させ、デフォルトチェンジリストで編集目的で作業状態にします。

C:\bruno_ws\>p4 sync //depot/dev/main/jam/*.c
[list of files synced...]

C:\bruno_ws>p4 edit //depot/dev/main/jam/*.c
[list of files opened for edit...]

ここでブルーノはp4 changeコマンドを発行して、チェンジリストフォームにコメントを入力します。彼がファイルを保存してエディタを終了させると、Perforceはファイルを含む番号付チェンジリストを作成します。

C:\bruno_ws\dev\main\docs\manuals>p4 change

    [Enter description and save form]

Change 777 created with 33 open file(s).

ブルーノは2番目のバグ修正に対しても同様に、p4 syncp4 editp4 changeを実行します。このようにして、各修正に対して1つずつ、2つの番号付チェンジリストが作成されました。

サブミット済みチェンジリストに割り当てられる番号は、チェンジリストがサブミットされた順番を表します。チェンジリストがサブミットされるとき、以下の例で示すようにPerforceが番号を付け替える場合があります。

Example 23. チェンジリスト番号の自動付け替え

ブルーノは、チェンジリスト777を使って作業していたバグの修正を完了しました。そのチェンジリストを作成した後に、ブルーノは別のチェンジリストをサブミットし、他の2人のユーザもチェンジリストをサブミットしました。ブルーノがp4 submit -c 777を実行してチェンジリスト777をサブミットすると、次のようなメッセージが表示されます。

Change 777 renamed change 783 and submitted.

チェンジリストのサブミット

作業中チェンジリストをサブミットするには、p4 submitコマンドを発行します。p4 submitコマンドを発行すると、フォームが表示され、チェンジリストにあるファイルがそこにリストされます。このリストからファイルを取り除くこともできます。取り除いたファイルは、サブミットまたは復元を行わない限り、デフォルトの作業中チェンジリスト内に作業状態のまま残ります。

デフォルトチェンジリストで作業状態にされている特定のファイルをサブミットするには、p4 submit filenameコマンドを発行します。ファイルの集合を指定するには、ワイルドカードを使用します。例えば、デフォルトチェンジリストで作業状態にされているすべてのテキストファイルをサブミットするには、p4 submit "*".txtと入力します。(エスケープコードとして引用符を*ワイルドカードの前後に付けて、ローカルコマンドシェルにより解釈されないようにしてください)。

チェンジリストフォームを保存してテキストエディタを終了すると、チェンジリストがPerforceサービスにサブミットされ、ディポのファイルが更新されます。チェンジリストのサブミットが成功すると、それを変更できるのはPerforce管理者のみとなり、変更可能なフィールドはコメントおよびユーザ名のみになります。

デフォルトチェンジリストのサブミットの際にエラーが発生した場合、Perforceはサブミットしようとしたファイルを含む番号付チェンジリストを作成します。問題の修正後、-cオプションを使用して番号付チェンジリストをサブミットしなければなりません。

Perforceは編集目的で作業状態にしたファイルを書き込み可能にして、それらのファイルを含むチェンジリストのサブミットが成功したときに書き込み禁止にします。Perforceによるワークスペース管理と衝突しないようにするため、ファイルの書き込み権限を手動で変更しないでください。

チェンジリストをコミットする前に、p4 submitは少しの間、サブミットされるすべてのファイルをロックします。ロックもサブミットもされないファイルが存在する場合、そのファイルは番号付き作業中チェンジリストにおいて作業状態のままになります。既定では、サブミット操作に失敗したファイルは、submit.unlocklocked構成可能変数が設定されていない限り、ロックされたままになります。サブミットに失敗した場合、たとえサブミット前に手動でロックされていたとしても、submit.unlocklockedが設定されていれば、ファイルのロックは解除されます。

チェンジリストを削除する

作業中チェンジリストを削除するには、まずそのチェンジリストに関連付けられているすべてのファイルおよびジョブを削除した後、p4 change -d changenumコマンドを発行します。関連する操作には以下のものが含まれます。

  • ファイルを別のチェンジリストに移動するには、p4 reopen -c changenumコマンドを発行します。

  • ファイルをチェンジリストから削除して変更を破棄するには、p4 revert -c changenumコマンドを発行します。

既にサブミットされたチェンジリストの削除は、Perforce管理者のみが実行可能です。詳細については、『Perforceサーバ管理者ガイド: 基本』を参照してください。

ファイルのリネームと移動

ファイルのリネームまたは移動を行うには、まずファイルを追加または編集目的で作業状態にしてから、p4 moveコマンドを使用します。

p4 move source_file target_file

ファイルの集合を移動するには、source_file指定子とtarget_file指定子とで一致するワイルドカードを使用します。ファイルを移動するには、指定されたファイルに対するPerforceのwrite権限が必要です。Perforce権限に関して詳しくは、『Perforceサーバ管理者ガイド: 基本』を参照してください。

p4 moveを使用してファイルのリネームまたは移動を行うとき、バージョン化サービスは削除された先行ファイルにリンクする反映記録も作成して、ファイルの履歴を保存します。反映操作はブランチの作成および変更の伝達にも使用されます。詳細については、変更を反映させるを参照してください。

進行中の作業を保留する

Perforceの保留機能では、チェンジリストをディポにチェックインすることなく、自分のファイルのコピーを他のユーザが使用できるようにすることができます。

保留機能は、変更をチェックインする前にタスクを切り替えたり、クロスプラットフォームテストを実行したりする個々の開発者にとって有効です。また、保留機能により、チームに変更を容易に引き継ぐことやコードレビューを実行することが可能です。

Example 24. チェンジリストを保留する。

アールはUNIXプラットフォームにおいてcommand.cを変更したので、自分の加えた変更を他のメンバーが確認し、テストして欲しいと考えています。

$ p4 edit //depot/dev/command.c
//depot/dev/command.c#9 - opened for edit
...

$ p4 shelve
Change 123 created with 1 open file(s).
Shelving files for change 123.
edit //depot/dev/command.c#9
Change 123 files shelved.

作業中チェンジリストが作成され、保留されたバージョンのcommand.cがサービスに格納されます。command.cファイルはアールのワークスペースに編集可能な状態で残されているので、アールはファイルへの作業を続行するか、自分の変更を元に戻して他の作業を行うことが可能です。

保留されたファイルは、それらを保留したときのチェンジリスト内で作業状態のまま残されます。(既存の保留状態のチェンジリストにファイルを追加するには、まずそのファイルを当該チェンジリストで作業状態にしなければなりません。)ユーザは保留されたファイルに影響を与えることなく、ワークスペース内のファイルへの作業を続行することができます。保留されたファイルは、他のユーザが所有するワークスペースも含め、他のワークスペースに同期させることができます。例:

Example 25. コードレビューのためにチェンジリストの保留を解除する

アールは、彼がチェンジリスト123で保留したバージョンのcommand.cに対し、コードレビューとクロスプラットフォームでの互換性のチェックを依頼しました。ブルーノはWindowsマシンを使用しているので、次のように入力します。

C:\bruno_ws\dev> p4 unshelve -s 123 //depot/dev/command.c
//depot/dev/command.c#9 - unshelved, opened for edit

そしてWindows環境でテストを行い、その間アールは他の作業を続行します。

ファイルを保留すると、保留状態のバージョンは、ユーザがワークスペースで実行するコマンド(他の作業を行うためにファイルを元に戻す操作も含めて)の影響を受けません。

Example 26. 他のユーザにファイルを引き継ぐ。

アールのバージョンのcommand.cはUNIX上で動作しますが、ブルーノがcommand.cのクロスプラットフォーム互換性をチェックしたところ、バグが発見されました。ここからはブルーノが仕事を引き継ぎ、アールは自分のワークスペースを元に戻して別の作業を行うことができます。

$ p4 revert //depot/dev/command.c
//depot/dev/command.c#9 - was edit, reverted

command.cの保留されたバージョンは依然としてアールの作業中チェンジリスト123から入手できるため、ブルーノはそれを新しいチェンジリストであるチェンジリスト124で作業状態にします。

$ p4 unshelve -s 123 -c 124 //depot/dev/command.c
//depot/dev/command.c#9 - unshelved, opened for edit

ブルーノが作業を完了したら、さらにレビューを行うためにファイルを(アールのチェンジリスト123ではなく自分のチェンジリスト124で)再度保留するか、または保留されたファイルを破棄し、p4 submitを使用して自分のワークスペース内のバージョンをサブミットすることができます。

p4 submitコマンドには-eオプションがあり、これを使用すると保留されたファイルを直接チェンジリストからサブミットできます。保留状態のチェンジリストにあるすべてのファイルが最新であり、衝突解決されている必要があります。ストリームターゲットに保留されているファイルには、その他の制限が適用される場合があります。詳しくは、『P4コマンドリファレンス』を参照してください。(これらの制限に対処せずに済むように、チェンジリストをサブミットする前に、保留状態のファイルをいつでも新しい作業中チェンジリストに移動することができます。)

Example 27. 変更をサブミットする前に保留状態のファイルを破棄する。

Windowsでのクロスプラットフォーム対応の変更が完了したため、チェンジリスト124をサブミットする準備ができました。ブルーノはp4 shelve -dを使用して、保留されたファイルを破棄します。

C:\bruno_ws\dev> p4 shelve -d -c 124
Shelve 124 deleted.

保留されたチェンジリスト内のすべてのファイルが削除されます。これでブルーノはチェンジリストをサブミットすることができます。

C:\bruno_ws\dev> p4 submit -c 124
Change 124 submitted.

ブルーノがチェンジリスト124でそのファイルを保留して、アールがそのファイルを保留解除して元のチェンジリスト123に戻し、チェックインを完了させることもできます。

チェンジリストに関する情報を表示する

チェンジリストの簡潔な情報を表示するには、p4 changesコマンドを使用します。詳細な情報を表示するには、p4 describeコマンドを使用します。以下の表に有用なレポートコマンドおよびオプションをいくつか記述します。

コマンド

解説

p4 changes

すべての作業中チェンジリスト、サブミット済みチェンジリスト、および保留状態のチェンジリストの一覧を表示します。チェンジリストあたり1行の簡単なコメントが付きます。

p4 changes -m count

レポートされるチェンジリストの数を、最新のcount数のチェンジリストの数に制限します。

p4 changes -s status

特定の状態statusのチェンジリストだけの一覧を表示します。例えば、p4 changes -s submittedの場合は、サブミット済チェンジリストだけが表示されます。

p4 changes -u user

特定のユーザuserによってサブミットされたチェンジリストの一覧を表示します。

p4 changes -c workspace

特定のクライアントワークスペースworkspaceからサブミットされたチェンジリストの一覧を表示します。

p4 describe changenum

単一のチェンジリストに関するすべての情報を表示します。サブミット済チェンジリストの場合、対象ファイルの一覧および処理済みファイルの差分もレポートに含まれます。(ファイルの差分を除外する場合は、-sオプションを使用します。)

p4 describe -O changenum

チェンジリスト番号が変更されている場合、チェンジリストを元のチェンジリスト番号で表します。(例えば、Example 23, “チェンジリスト番号の自動付け替え”の例で番号が変えられたチェンジリストは、p4 describe 783またはp4 describe -O 777により取得できます。)

詳細については、チェンジリストのレポートを参照してください。

ファイル内容を比較する

Perforceではテキストファイルのリビジョンの差分を取る(比較する)ことが可能です。ファイル内容を比較することにより、次のような内容を表示できます。

  • ファイルを編集目的で作業状態にした後に行った変更

  • 2つのリビジョン間の差分

  • 異なるブランチにあるファイルリビジョン間の差分

ワークスペースに同期されたファイルをディポリビジョンと比較するには、p4 diff filename#revコマンドを発行します。リビジョン指定子を省略すると、ワークスペース内のファイルは、最後に同期させたリビジョンと比較され、同期させた後に行った変更が表示されます。

ディポには存在してワークスペースには存在しない2つのリビジョンを比較するには、p4 diff2コマンドを使用します。ファイルの集合を比較するには、p4 diff2コマンドの発行時にファイル名の引数にワイルドカードを指定します。

p4 diffコマンドではワークステーション上で比較が行われますが、p4 diff2コマンドはdiffを実行してその結果をユーザにおくるようにPerforceサービスに指示します。

以下の表に比較コマンドに共通する用途をいくつか示します。

比較するファイル

比較対象

使用するコマンド

ワークスペースファイル

最新リビジョン

p4 diff fileまたはp4 diff file#head

ワークスペースファイル

リビジョン3

p4 diff file#3

最新リビジョン

リビジョン134

p4 diff2 file file#134

チェンジリスト32のファイルリビジョン

チェンジリスト177のファイルリビジョン

p4 diff2 file@32 file@177

ワークスペースファイル

作業中チェンジリスト123内の保留状態のファイル

p4 diff file@=123

リリース1のすべてのファイル

リリース2のすべてのファイル

p4 diff2 //depot/rel1/... //depot/rel2/...

デフォルトでは、p4 diffコマンドによりPerforce内部の比較アプリケーションが起動されます。異なる比較プログラムを使用するには、P4DIFF環境変数を設定して目的のアプリケーションのパスと実行ファイル名を指定します。外部の比較アプリケーションに引数を指定するには、-dオプションを使用します。詳細については、『P4コマンドリファレンス』を参照してください。

オフラインで作業する

オフラインで(Perforceサービスにアクセスせずに)作業する場合に推奨される方法は、Perforceサンドボックスを使用することです。詳細については、『Perforce サンドボックスユーザーズガイド』を参照してください。

Perforceサンドボックスをご使用でない場合は、Perforceサービスに再度アクセスしたときにそれまで行った作業を手動で一致させなければなりません。以下に示す非接続での作業方法は、ワークスペースにあるファイルを直接操作する場合、またはディポを更新する前に追加、更新、削除を行ってワークスペースを更新する場合を想定しています。

オフラインで作業するには

  1. p4コマンドを発行せずに、ファイルを操作します。または、OSのコマンドを使ってファイルのパーミッションを変更してください。

  2. ネットワーク接続が再確立されたら、p4 statusまたはp4 reconcileを使用してワークスペース内のすべての変更されたファイルを見つけます。

  3. 結果となるチェンジリストをサブミットします。

変更されたファイルを検出するには、p4 statusコマンドまたはp4 reconcileコマンドを発行します。このコマンドは本質的には同じ動作を行いますが、デフォルトの動作と出力形式が異なります。

コマンド

解説

p4 reconcile

引数を付けずに実行すると、p4 reconcileはファイルをチェンジリスト内で作業状態にします。操作のプレビューを行うには、p4 reconcile-nオプションを使用するか、p4 statusコマンドを使用してください。

p4 status

引数を付けずに実行すると、p4 statusはワークスペース照合の結果のみをプレビューします。実際にファイルをチェンジリスト内で作業状態にするには、p4 status -A (または-e-a-dオプションの組み合わせ)を使用する必要があります。