本页目录

Perforce 操作手册

Perforce (P4) 是集中式版本控制系统。核心概念: depot (仓库), workspace/client (工作区映射), changelist (修改集合, 类似 Git 的 staging), shelve (暂存到服务器, 类似 Git stash push), stream (分支模型)。

p4 命令依赖环境变量 P4PORTP4USERP4CLIENT,或通过 -p/-u/-c 参数指定。

工作区

工作区定义了 depot 路径到本地路径的映射,每个工作区有唯一 client name (通常 = hostname)。

p4 client                              # 创建/编辑当前工作区 (打开编辑器)
p4 client -o                          # 查看工作区配置 (不编辑)
p4 client -o <name>                   # 查看指定工作区
p4 client -d <name>                   # 删除工作区
p4 clients                            # 列出所有工作区
p4 clients -u <user>                  # 某用户的工作区

# 关键 View 字段: depot → local 映射
# //depot/project/... //client/project/...
# -//depot/project/build/... //client/project/build/...   ← 排除目录

同步与更新

p4 sync                               # 同步当前工作区 (只拉有变化的文件)
p4 sync -f                            # 强制覆盖本地 (即使文件没变也重新拉)
p4 sync -f #none                      # 清空本地 (不删除文件但标记为 not having)
p4 sync //depot/path/...              # 只同步特定路径
p4 sync @changelist                   # 同步到指定 changelist
p4 sync ...@2025/01/15                # 同步到指定日期

Changelist

P4 没有 staging area——修改自动进入 default changelist。提交前通常创建 numbered changelist 管理一组修改。

# 查看
p4 changes -m 10                      # 最近 10 个提交
p4 changes -u <user> -m 10            # 某用户的提交
p4 changes -s submitted               # 只看已提交的
p4 describe <changelist>              # 查看 changelist 详情 (文件 diff + 描述)

# 操作
p4 opened                             # 当前工作区已打开的文件 (类似 git status)
p4 opened -c <changelist>             # 指定 changelist 的文件

p4 change                             # 创建新的 numbered changelist (打开编辑器)
p4 change -o                         # 查看当前 changelist 内容

p4 reopen -c <changelist> <file>      # 把文件移到指定 changelist
p4 revert <file>                      # 撤销修改 (类似 git checkout -- file)
p4 revert -c <changelist> //...       # 撤销整个 changelist

p4 submit -c <changelist>             # 提交指定 changelist
p4 submit -d "description"            # 提交 default changelist

Shelve

将未完成的修改暂存到服务器,不提交。其他开发者可以 unshelve 查看或接手。

p4 shelve -c <changelist>             # 暂存到服务器
p4 shelve -c <changelist> -f          # 覆盖已存在的 shelve
p4 unshelve -s <changelist>           # 取回 shelved 修改
p4 unshelve -s <changelist> -c <new>  # 取回到新 changelist
p4 shelve -d -c <changelist>          # 删除 shelve
p4 describe -S -s <changelist>        # 查看 shelved 内容

# 列出所有 shelved changelists
p4 changes -s shelved -u <user>

文件操作

p4 add <file>                         # 添加新文件 (类似 git add)
p4 edit <file>                        # 签出编辑 (类似 git 的东西, P4 文件默认只读)
p4 delete <file>                      # 标记删除
p4 move <src> <dst>                   # 移动/重命名 (保留历史)
p4 copy <src> <dst>                   # 复制 (记录分支来源)

p4 diff <file>                        # 查看修改 (类似 git diff)
p4 diff -f <file>                     # 强制 diff (即使文件未 checkout)
p4 diff2 -q //depot/...@cl1 //depot/...@cl2  # 两个 changelist 间的差异

p4 annotate <file>                    # 注解, 类似 git blame
p4 filelog <file>                     # 文件历史
p4 filelog -l <file>                  # 完整提交描述

Stream (分支模型)

p4 stream -o //depot/stream-name      # 查看 stream 配置
p4 streams                            # 列出所有 stream

调试

p4 info                               # 服务器信息 (版本, 地址, 用户名)
p4 where //depot/path/file            # 查看 depot 路径映射到本地的实际路径
p4 have                               # 列出本地已有文件 (类似已同步版本)
p4 files //depot/path/...             # 列出 depot 中的文件
p4 fstat <file>                       # 文件状态: head revision, last change, lock...
p4 login                              # 登录 (输入密码)
p4 login -s                           # 查看登录状态
p4 logout
p4 set                                # 查看环境变量 (P4PORT/P4USER/P4CLIENT)