Perforce 操作マニュアル

9 分で読了
このページの目次

workspace マッピング、サーバーの have list、ローカル内容は一致しないことがある。P4PORT・P4USER・P4CLIENT を確認してから同期、変更登録、shelve、submit を行う。パスと changelist は例。

やりたいこと参照先
同期先がおかしいマッピングと have list
オフライン編集が認識されない変更登録と提出
未提出の作業を引き継ぐShelve と復元

強制同期の前にマッピングを確認

サーバー・認証主体・workspace を確認する

# 実際の接続先・ユーザー・client を確認する
p4 info

Server address・User name・Client name・Client root を確認する。接続・認証エラーは sync 前に解決する。

# 現在のログインチケットを確認する
p4 login -s

期限切れなら p4 login で対話認証して再確認する。パスワードを引数に書かない。設定元が不明なら p4 set を別途読む。

# client の Root・View・Stream を読む
p4 client -o

読取専用。p4 client で変更する前に仕様を保存し、既存作業の所属を確認する。

# depot・client・ローカルのパスを照合する
p4 where //depot/project/file.txt

実際の depot ファイルを指定する。not in client view はマッピングの問題で、強制 sync では直らない。

# サーバーに記録された同期済み revision を読む
p4 have //depot/project/...

... は範囲を再帰的に含める。have はディスク内容を検証しない。

同じ範囲をプレビューしてから同期する

# ローカルの追加・更新・削除予定を確認する
p4 sync -n //depot/project/...

件数・パス・対象 revision を確認し、必要な変更を保存してから進む。

# 確認した範囲を現在の depot revision に同期する
p4 sync //depot/project/...

同じ file spec に @CHANGE / #REV を付けて固定できる。その指定で先にプレビューする。出力と have を確認し、開いているファイルや上書き保護のエラーでは部分成功を見落とさない。

p4 where で depot・client・ローカルのパスを照合する。Root・View・Stream が違えば同期先も変わる。client 名は論理名でホスト名と同じでなくてよい。have は同期版の記録であり現在の内容検査ではない。

図を準備しています
have list と disk 内容は別の状態

sync -k は server 記録のみ、disk は不変。sync -f は再転送。#none は管理 file と have 記録を削除する。

操作ローカルファイルhave list
p4 sync PATHopen 状態と上書き保護に従って更新更新
p4 sync -f PATH強制転送。保持する変更を先に確認更新
p4 sync -k PATH転送・変更なし記録のみ変更。flush 相当で不一致を作り得る
p4 sync "//depot/project/...#none"範囲内の管理対象ローカルファイルを削除。open 状態の制約あり対応する記録を削除

"#none" はメタデータだけの削除ではない。引用符で shell の特殊解釈も避ける。同範囲を sync -n で確認し、マッピング不良を -f で直そうとしない。

ファイルを open して changelist を確認

変更種別に応じて open 操作を選ぶ

edit/add/delete/move は異なる変更向けで、すべて順番に実行するものではない。確認済み workspace の相対パスを使う。

# 追跡済みファイルを編集用に開く
p4 edit file.txt

編集後、p4 diff file.txt で確認する。

# 作成済みの新規ファイルを追加予定にする
p4 add new-file.txt

内容は作らない。p4 opened で add を確認する。

# 不要なファイルを削除予定にする
p4 delete obsolete-file.txt

ローカルに影響し、submit 後に depot の最新から削除される。opened で対象を確認し、誤指定なら revert の影響を確認して戻す。

# 履歴を関連付けて名前を変更する
p4 move old-name.txt new-name.txt

必要に応じて元を edit で開き、未使用の移動先を使う。move/delete と move/add の対、および新パスの内容を確認する。

オフライン編集は検出してから登録する

# 現在のディレクトリ以下の未登録変更を確認する
p4 reconcile -n ...

追加・変更・削除候補から生成物を除き、範囲を絞った p4 reconcile path/to/file で登録する。未 open の差分は p4 diff -f file.txt。ここでの -f は強制同期ではない。

# 作業説明付きの番号付き changelist を作る
p4 change

Description と Files を編集し、保存後の番号を記録する。以下の 12345 はその例であり置き換える。

任意のファイル編集が自動的に changelist に入るわけではない。オフライン変更は reconcile -n で add/edit/delete を確認し、範囲を絞って登録する。未 open ファイルは diff -f。番号付き changelist を作り reopen で移す。

リスト整理・競合解決・submit の順で進む

# open 済みファイルを対象の pending リストへ移す
p4 reopen -c 12345 file.txt

-c は changelist 選択。未 open のファイルを自動登録するものではない。

# リスト内のパス・操作・型を確認する
p4 opened -c 12345

p4 diff -du file.txt で内容を読み、追加ファイルは直接確認する。describe -s の概要だけでは不十分。

# この changelist の未解決処理を確認する
p4 resolve -n -c 12345

必要なら p4 resolve -c 12345 で個別に確認し、diff・テスト・再プレビューを行う。一方を無条件で採用しない。

# 確認・テスト・解決済みリストを submit する
p4 submit -c 12345

成功時の番号を記録し、p4 describe -s NUMBER で確認する。失敗時はエラーと opened を調べる。

ローカル変更の破棄は別途確認する

# 取り消す open 操作をプレビューする
p4 revert -n file.txt

必要な内容を保存してから p4 revert file.txt。edit の変更は破棄され、add/delete はローカルへの影響が異なる。未変更だけなら範囲確認とプレビュー後に revert -a を選ぶ。

12345 は pending changelist の例。resolve 対象と競合を確認し、内容・テスト・stream を確認して submit する。revert は作業変更を破棄する。revert -a も対象を確認して使う。

Shelve はサーバー上の未提出内容

shelve 後にサーバー上の内容を確認する

# pending の内容をサーバーの shelf に保存する
p4 shelve -c 12345

作成済み pending の番号を使う。submit せず、ローカル作業も消さない。

# shelf のファイルとパッチを確認する
p4 describe -S 12345

受取側は p4 changes -s shelved -u YOUR_USER で探せる。確認済みのユーザー名を使う。

受取 workspace の新しいリストへ復元する

受取側のマッピングと作業を確認し、p4 change で対象 12346 を作る。元の 12345 とは別番号。

# 元 shelf を対象 pending リストへ復元する
p4 unshelve -s 12345 -c 12346

opened -c 12346・diff・resolve -n -c 12346 を確認し、必要なら解決・テストする。元 shelf は残る。stream をまたぐ場合は対応関係も確認する。

# 引継ぎ完了と保持不要を確認してから元 shelf を削除する
p4 shelve -d -c 12345

ローカルの revert や submit 済み履歴削除とは別。削除前に describe -S で番号と内容を再確認する。

履歴・行の由来・stream 仕様を必要に応じて調べる

# revision と統合履歴を読む
p4 filelog file.txt

行ごとの由来は別途 p4 annotate file.txt で調べ、対応 changelist を読む。ファイルを変更する手順ではない。

# stream の親子関係とパス規則を読む
p4 stream -o //streams/main

実際の stream 名を使い、client -o の Stream と照合する。

shelve は depot に submit せず、ローカル編集も消さない。unshelve は対象 changelist に復元し resolve が必要な場合がある。既存 shelf の置換は利用者と版を確認する。shelf 削除とローカル revert は別操作。

p4 sync · p4 reconcile · p4 shelve