版本管理工具-Module
简介
一个版本控制工具
基本概念
depot
depot 翻译过来为仓库,在安装perforce后,默认会有一个local的depot,并且名字也叫depot
。depot包含下面几种(:
来源于官方文档和chatgpt)
- local : 默认类型,文件直接存储在 Perforce 服务器上
- stream : 用于管理流式开发模型(Streams)。
- remote : 允许一个 Perforce 服务器访问另一个服务器上的 depot,适用于跨服务器协作。
- archive : 存储已归档的文件,不支持提交或编辑,主要用于历史记录的长期保存。
- spec : 存储已归档的文件,不支持提交或编辑,主要用于历史记录的长期保存。
- unload : 存储被卸载的客户端工作区或任务流的数据,减少服务器的负担。
- tangent :
- graph : 用于存储 Git 仓库中的数据,支持 Git 和 Perforce 同时工作(Git Fusion 功能)。
- trait
stream
stream 为流,保存在服务器上。是一种特殊的depot。
workspace
workspace : 工作空间,内容保存在本地目录。在将perforce服务器上的内容sync到本地时,文件默认不具备写的权限,需要使用p4 open xxx
将某个文件的状态至于open状态,这个操作会让某个文件具有了写的权限。使用chmod
来改变文件的属性不会改变该文件在perforce上的状态
client
client : clinet和workspace可以理解为一样的东西.What’s the relationship between client and workspace in perforce?
启动
服务端
使用p4d
或者使用脚本 p4d.sh。参数:
- -r 指定根目录
- -d 指定 TCP/IP 端口
客户端
使用p4v
启动图形化界面
客户端配置
client设置
在进入workspace后,使用p4 client
可以修改client的一些设置, 比如SubmitOptions
选项,输出可能为
SubmitOptions: submitunchanged
这里表示所有open的文件都可以提交到depot上,哪怕文件没有更改,SubmitOptions可用的选项有:
选项 | 描述 |
---|---|
submitunchanged | 所有open的文件,不管内容是否有改变,都提交到depot上,默认设置 |
submitunchanged+reopen | 所有open的文件,不管内容是改变,都提交到depot上,并且所有本来open的文件重新在默认的changelist中打开 |
revertunchanged | 只会提交内容,类型或者resolved(冲突)有变化的文件,没发生改变的文件会revert回去 |
revertunchanged+reopen | 只会提交default changelist中,内容,类型或者resolved(冲突)有变化的文件,没发生改变的文件会revert回去,并且在default changelist中不会处于open状态 |
leaveunchanged | 只会提交内容,类型或者resolved(冲突)有变化的文件,没有发生改变的会移动到default changelist中 |
leaveunchanged+reopen | 只会提交内容,类型或者resolved(冲突)有变化的文件,没改变的文件会移动到default changelist中,并且改变的文件会在default chagnelist中重新打开 |
命令
完整版可参看官方文档
depot相关
p4 depots
: 查看所有的 depotp4 depot xx
: 新建 xx depotp4 depot -d xx
: 删除 xx depotp4 depot -f -d sandbox
: 强制删除 sandbox depot- 删除非空的 depot
p4 obliterate -y //lang/...
p4 depot -d lang
stream相关
p4 depot -t stream JamCode
: 创建一个 stream depotp4 stream -t mainline //lang/c
: 在 lang 下创建 c,为 mainline 类型,前提是lang的深度必须要为2p4 streamlog //lang/c
: 查看stream spec的更改历史p4 streamlog -m 10 //lang/c
: 查看stream spec的最近10次更改记录
client/workspace 相关
p4 client xxx
: 创建 client xxxp4 client -d release1
: 删除 client release1p4 clients
: 列出所有的 clientsp4 client -S stream clientname
: 新建一个 client,并且与 stream 绑定p4 client -s -S stream clientname
: 改变 client 与 stream 的映射p4 client -S //JamCode/main
: 将 workspace 与 stream 绑定p4 workspaces
: 查看所有的 workspacep4 workspace xx
: 创建 xx workspacep4 workspace -d xx
: 删除 xx workspace
文件相关
p4 add
p4 add
可以将workspace中的文件标记为需要上传到服务器上,该命令不会创建文件或者覆盖原文件,在执行p4 submit
之前,文件不会被上传到服务器上。
- 完整命令:
p4 [g-opts] add [-c changelist] [-d -f -I -n] [-t filetype] file ...
- 举例:
p4 add file
: 添加filep4 add xx/...
: 添加俺xx目录所有文件
p4 edit
p4 edit
可以将文件的权限更改,赋予文件写(w)权限,在执行p4 sumbit
前,改动的部分不会真正提交到服务器上。常见用法举例:
p4 edit file
: 编辑filep4 edit xx/...
: 编辑xx下的所有文件
- p4打开某个文件夹下面的所有内容
p4 edit //depot/project/...
p4 edit //depot/project/xxx/...
p4 open
p4 opened
: 查看已经open的文件
p4 submit
p4 submit -d "添加描述" aaa
: 提交文件aaa到perfore服务器p4 submit -c xxx
: 提交某个changelist xxx
p4 sync
p4 sync test
: sync文件test的最新版本p4 sync test#1
: sync文件test的第一个版本p4 sync -n
: 查看sync的结果,不实际sync
p4 diff
p4 diff a b
: 比较文件a和文件bp4 diff a#1 a#2
: 比较文件a的第一版和第二版
p4 change
- p4 changelist是
p4 change
的别名 p4 change xxx
: 可修改xxx的描述p4 changes -m 1 ...#have
: 查看某个workspace下已有的最新changelist
p4 changes
- p4 changelists是
p4 changes
的别名 - 列出已经提交的和等待提交的变更集
- 完整命令
p4 [g-opts] changes [-i -t -l -L -f] [-c client [-E]] [ -e changelist#] [-m max] [-r] [-s status] [-u user | --me] [[FileSpec][revSpec]][--stream | --nostream]
p4 changes -u xx -m 100
: 查看某人最新的100条变更集
p4 diff
用于diff两个文件
p4 diff2
其它一些组合操作
- p4重命名文件操作,比如把aa命名为bb
p4 edit aa p4 move aa bb p4 submit -d "xxxx" bb
- p4 移动文件夹
p4 edit //xxx/xx/old/...
p4 move //xxx/xx/old/... //xxx/xx/new/...
- 查看某个client中pending的cl
p4 changes -s pending -u <your-username> -c <your-client>
- 删除某个CL:
p4 change -d <changelist-number>
只能删除CL中没有文件的
user相关
p4 users
: 查看所有的用户p4 groups
: 查看所有的组p4 user -f xx
: 新建 xx 用户,如果用户存在,则可以修改用户的密码,在Password一栏,修改密码,如果没有,则新建一栏,保存后再次打开会加密- p4v 修改用户的密码:p4v -> connection -> change password
集成
- 需要到待集成的workspace操作,也即是没有该文件的workspace
p4 integrate -n
: 显示过程,不实际集成p4 integrate //script/tool/add_gps_info.py //language/python/add_gps_info.py
将//script/tool/add_gps_info.py集成到//language/python中,需要在//lang/python相关联的workspace中操作
p4 integrate //script/tool/… //language/python/…` 讲//script/tool/流中的所有文件都集成到//language/python/流中
感谢您的支持,请扫码打赏

