欢迎大家来到IT世界,在知识的湖畔探索吧!
Perforce(p4)入门
Jambo Ma 整理
资料来源于网友的文章或官方帮助
2021-10-27
一、 P4简介
Perforce是一款非常优秀的商业化版本管理工具(Software configuration management),特别是对 美术资源比较友好,更新速度快安全。 Perforce,一般简称P4,系统由服务器端,客户端组成,还包括 若干中介服务器 (Proxy Server)。客户端会有GUI界面, 命令行界面, Web界面。
二、安装
可去公司的软件中心,或相关项目组配置中心获取客户端版本
启动P4登录输入服务器地址,输入分配的P4账号,自己创建一个新的Workspace
创建Workspace,名字的话包含项目,职位,员工名称,按照如下规则(遵循项目组约定):
如果客户端让你确认证书,请选择相信
重要:如果客户端让你选择编码方式,请选择UTF8编码(遵循项目组约定)
重要:修改Line ending:菜单栏中依次选择Connection–>Edit Current Workspace–>Advanced,然后 选择UNIX (遵循项目组约定)
如果有多个库,点击Connection->Open Connection可以弹出设置服务器,用户, WorkSpace的窗口
三、 UI介绍
1、 Workspace
Workspace可以理解为, depot到本地的一个映射,对应本地的一个目录
开发的过程中可以有多个Workspace (例如一个用来开发,一个用来更新验证保证提交没有错误),但 一般只推荐有一个Workspace (遵循项目组约定)。 WorkSpace可以切换,通过Connection->Switch To Workspace或者,如下图
选择列表中的Workspace条目,双击切换,按DEL按键可以删除Workspace。出现问题的时候先确认下 Worksapce是否正确。 WorkSpace可以编辑,通过Connection->Switch To Workspace,如下图:
2、视图以及刷新
目录区,分为Depot标签页表示服务器上存储的文件目录结构,和Workspace表示本地存储的文件目录结构。操作区,带警告标识的文件表示本地和服务器不一致(会有版本对比显示),一般这种情况请先更新P4。
文件目录里没有任何标记的文件是说明服务器上没有的,比如
红色问号的表示和服务器上不一样,有冲突的。这种文件不能直接合入:
如不能及时更新相关信息,则可以在view->refreash all:
也可以在任意文件,目录或changelist右键中找到refresh相关的操作
四、常用操作
1、获取资源
Get Lastest Revision,这样可以拉取服务器最新的变更,【提示:每次提交前必须拉取一次】(遵循项 目组约定):
Get Latest Revision是拉取服务器最新变更,但是有时候我们希望覆盖本地的资源,或者是P4出了一些问题导致一些资源没有更新到。这时候我们可以选择Get Revision,然后在弹出的窗口勾选Force Operation,再点击Get Revision的按钮,强制从服务器上拉取最新的资源。这样服务器会把该目录下的资源强制拉取一遍,时间会比较长。也可以指定某个修订号(与svn等相似):
另外也可以对指定版本获取,一般用于回退到某个版本
2、添加新文件
如果在工程目录中添加了新文件,而且也想让别人可以用到,那就要告诉服务器我需要添加一个文件 (Mark for add),然后并确认(submit)
3、删除文件
和添加文件类似,不过这次右键点击要删除的文件或者和文件夹,选择mark fordelete
4、重置
Revert,当有文件不想提交的时候可以选择revert, revert之后会放弃本地修改(如有必要做好备份), 从服务器重新拉取最新的文件。选中文件或者Changelist之后右键,在弹出菜单里可以选择Revert If Unchanged或者Revert。 Revert If Unchanged是当本地文件和服务器一样没修改的时候会回退。 Revert则是强行回滚,放弃本地修改。如果选择的是Changelist,则会对Changelist下的所有问题做Revert操作
另外也可以通过工具栏的Revert按钮进行回退
5、 lock & unlock
锁定的文件可以check out 并修改,但是无法提交
6、移动和重命名
移动文件和重新命名需要通过P4操作,这样服务器才能知道我们的改动,本地操作无效
7、删除无用的pendinglist
及时清理,防止堆积
8、目录对比
Reconcile,一个便捷的方式可以直接对一个目录进行比较,找到和服务器上不同的文件,包括修改,删除,新增。找出之后会自动添加到Changelist中,自动完成上面三种操作
三个列表中分别显示,已修改,待添加,待删除
9、提交
有了Changelist之后,就可以提交了。右键Changelist选择Submit或者点击工具栏里的Submit图标,都 会弹出 上传的提示框,输入上传的备注之后就可以提交了。建议每次提交前先对Changelist右键选择 Revert Unchanged Files防止提交一些未修改过的文件。【提示:提交备注一定要写的详细清晰易懂; 建议“原子”提交,也既每次提交,只修改与log内容一致的修订内容】
10、获取历史记录
有多种方法可以看到目录或者文件的历史,可以看到在什么时候谁传了什么内容。可以比较修改了什 么,也可以直接获得历史版本。【提示:每次提交前必须先对比一下本地文件和服务器文件的差异】。 在Changelist的文件上右键,选择File History,会弹出文件历史窗口
可以对历史做比较,可以比较任意两个历史版本,也可以拿当前本地文件和服务器历史版本比较等等
还有一种就是选中目录区的文件夹或者文件上,然后在信息区切到History的标签页上
11、解决冲突
Resolve,当本地文件和服务器有冲突时文件上会有红色的问号。这时候我们必须首先解决冲突;在冲突 文件上右键选择Resolve
弹出菜单中有四种选项, Accept Source, Accept Target, Accept Meged, Run Merge Tool。如果希 望以自己的为准强行合并,就选择Accept Target一般来说美术资源多选择这个,如果希望以服务器为准 就选择Accept Source, Target还是Source可以通过上面显示的信息确认。如果希望让工具自动合并本 地和服务器,就选择Accept Merged。如果选择了Run Merged Tool就会弹出Merge工具,人工进行合并:
12、搁置
shelve,当有些文件本地修改了,希望让别人获得或者先不想上传自己缓存一下,可以使用Shelve功 能。这样这些文件会传到服务器上但是不会进版本,别人或者自己也可以从服务器上再拉下来。右键选 中的文件选择Shelve,也可以选中整个Changelist然后右键Shelve Files,成功之后会再Shelved Files有 文件列表
当想获得Shelve文件时,可以把Changelist的过滤关闭,选择希望Unshelve的Changelist,然后Unshelve
13、分支
新建
创建一个分支
弹出对话框
合并
当进行多线开发的时候会有多线之间互相合并的问题,例如目前的开发线是Client,920版本分支线是0.0.4.0,我们希望把主干的一次提交合并到分支上。我们可以在主干的提交记录History面板中选中历史的Changelist,然后右键选择Merge/Integrate。如下图
在弹出的面板中,将Merge method选择为Use branch mapping,将Branch mapping0.0.4.0,确保下方的信息栏中是从Client指向0.0.4.0分支的。最后点击下方的Merge按钮。如下图:
这样就会在Pending面板中自动生成一个合并到分支的Changelist,只要对这个Changelist进行Submit 提交即可。如下图
因为是合并操作,所以经常会出项冲突的情况的。这时候可以按照之前的教程进行Resolve合并解决冲 突。一般二进制资源无法合并,需要选择拿哪个版本覆盖。确保自己上传的是最新资源可以选择Accept Target,会拿本地版本覆盖服务器上冲突版本。可以从红圈内的target路径和source路径判断是拿那个 版本覆盖那个版本。选择如下图
五、命令行
下面列举一些常用的命令行指令;具体的用法,需要仔细阅读相关的help内容。
p4 login #登陆perforce
p4 help #显示关于命令的帮助
p4 -h #显示关于p4的帮助
p4 labels … #显示和这个目录相关的标签
p4 sync @label #同步标签label中的所有文件
p4 files @label #查看标签label所包含的文件列表
p4 revert #恢复所有打开的文件
p4 revert -n … #恢复所有打开却没提交的文件
p4 branch brach #新建分支
p4 integrate -b brach #合并分支brach中描述的文件
p4 opened #查看打开的文件
p4 help commands #查看p4所有命令的帮助
p4 dirs -H . #显示当前目录
p4 branches #显示所有的分支
p4 delete filename #从p4删除文件
p4 changelists -L … #显示当前目录下面所有文件的修改注释
p4 label label #新建标签 label,编辑标签
p4 tag -l label … #把当前目录下面的所有文件添加到标签 label
p4 changes … #当前目录的changelist
linux下perforce(p4)的使用方法和命令
环境变量:
export P4PASSWD=abcdefg
export P4CLIENT=dyoldfish.com
export P4USER=dyoldfish
export P4PORT=192.168.1.198:1666
命令:
1、 p4 client #配置本地信息
2、 p4 sync #从perforce 下载文件
3、 p4 login #登陆perforce
4、 p4 help #显示关于命令的帮助
5、 p4 -h #显示关于p4的帮助
6、 p4 labels … #显示和这个目录相关的标签
7、 p4 sync @dyoldfish_label #同步标签dyoldfish_label中的所有文件
8、 p4 files @dyoldfish_label #查看标签dyoldfish_label所包含的文件列表
9、 p4 revert #回复所有打开的文件
10、 p4 revert -n … #回复所有打开却没提交的文件
11、 p4 branch dyoldfish_brach #新建分支
12、 p4 integrate -b dyoldfish_brach #合并分支dyoldfish_brach中描述的文件
13、 p4 opened #查看打开的文件
14、 p4 help commands #查看p4所有命令的帮助
15、 4 dirs -H . #显示当前目录
16、 p4 branches #显示所有的分支
17、 p4 delete filename #从p4删除文件
18、 p4 changelists -L … #显示当前目录下面所有文件的修改注释
19、 p4 label dyoldfish_label #新建标签 dyoldfish_label,编辑标签
20、 p4 tag -l dyoldfish_label … #把当前目录下面的所有文件添加到标签 dyoldfish_label
21、 p4 changes … #当前目录的changelist
22、 p4 sync @10931 #sync file @changelist
23、 p4 sync …@10929 #only sync localfile@changelist
24、 p4 help revisions #查看关于文件范围的帮助
六、高阶话题
perforce, git, svn的区别
下面是常用三种SCM的区别
集中式与分布式
上图标注有错误, svn和perforece是集中式的。 Helix Core – Perforce的版本控制使用集中式模型。将 所有内容存储在一个地方可确保开发人员始终拥有最新版本。开发人员,无论位于何处,都将所有更改 提交到中央服务器。
git是分布式的,开发人员可以将源代码以及完整的版本历史记录下载到他们的计算机上,然后,他们可 以在本地进行更改。可以简单的认为, git本地有个svn库。
性能
Git更快的地方
使用Git可以更快地进行本地提交,比较和合并。但是,许多开发人员Push和Pull会降低性能并降低生产 率。
Perforce更快的地方
Helix Core专为速度和规模而设计。它每天可以处理数百万个事务,数十亿个文件和PB级的存储。开发 人员可以快速,轻松地查看工作站上是否具有文件的最新版本。另外,它使用独占锁定处理大型二进制 文件。这样可以防止团队成员的工作互相冲突。借助Perforce Federated Architecture,远程团队可以 在大型Clone/Pull/Build操作中体验本地速度性能。这可以减少使用传统Git进行的大量WAN等待。
大文件与二进制文件
Git提供LFS
今天, Git尝试使用Git LFS解决此问题。但是,大多数大型团队将其大型二进制资产存储在Nexus或 Artifactory等工件存储库工具中。这意味着您不再拥有单一的数据来源。这些其他工具也使您的构建流 程复杂化。
Perforce将所有内容存储在一个存储库中
在Helix Core中,工件与源代码和其他非代码资产一起存储。这些工件可以作为与相关源代码相同的更 改列表的一部分检入。将所有内容都放在一台中央服务器中可以简化工作流程。而且您的管理员无需管 理其他许可证和集成。
关于修改与提交
不同文件修改的处理, svn,自动合并这些修改
• 不同人修改不同文件,不会有任何提示。
• 对于一个项目中,不同文件的内容有互相关联的功能来说,可能导致第三方错误。导致“在我机器上很 好啊? ”问题频繁发生。
git/perforce,需要开发者现更新后提交
• 不管改了什么,都提示开发者处理,不能当“网盘”使用
• 因为都经过开发者合并,所以,可以做一些单元测试等验证工作,减少问题
对分支的处理
SVN 的分支是目录
• 优势:分支就是目录,非常直观,不需理解,当“网盘”用即可
• 问题:
○同时拥有多个分支,需要下载多个目录很占硬盘
○如果使用一个目录,切分支时要联网,可能很慢
○习惯不切分支,而是在多个分支目录上直接改文件的用户,天长日久之后,已经合并不回去了
GIT/Perforce 的分支不是目录
• GIT/Perforce 的问题:分支看不见,不直观;要用专门的软件如 SourceTree 才能看见
• GIT/Perforce 的优势:切换分支快
git分支
在Git中,创建分支后,您可以立即在本地新分支上开始工作。进行添加和更改后,可以提交到本地副 本。但是,合并到master分支的本地副本与将更改推送到中央存储库不同。
如果在推送更改时多个开发人员正在处理同一个文件,则可能会发生合并冲突。这就是为什么在合并之 前从服务器获取最新更改始终很重要的原因。但是,如果您有数百名开发人员在Git中开发项目,那么这 可能会很耗时。
而且,如果您有跨存储库的依赖关系,则需要协调各个存储库之间的合并冲突。这可能很棘手。随着您 的团队或存储库数量的增加,它变得越来越难。
Perforce分支
在Helix Core中,分支是在文件层次结构级别完成的。您的团队成员可以选择特定的文件进行检出并提 交回存储库中。独占签出使开发人员可以了解其他人的工作。有了文件级别的细化权限,管理员可以保 护他们最重要的文件。
Perforce Streams –我们的分支和合并方式– –简化了工作区的设置并有助于指导团队。开发人员可以轻 松地在流(分支)之间切换,并且很容易看到更改是如何传播的。与Git一样,将更改提交到主流/分支 时,仍然会发生冲突。这些通常易于管理。 Helix Core的优点是可以看到正在进行的工作,并且可以提 前通知潜在的合并冲突。
此外, Helix Core的可扩展性使开发人员可以通过一个动作提交可能影响多个组件的潜在大型变更列 表。这可以大大减少代码依赖性问题,而且可以轻松地跟踪和管理这些更改。
对权限的处理
SVN/Perforce 的权限
权限可以细分到项目里的目录
GIT 的权限
这个特性 GIT 完败,一个项目只能使用同一套权限,如果有大量的项目互相依赖,要拉代码需要申请几 十个权限(因此诞生了字节内部的“一键批量申请权限”的工具)。这也是 Google 嫌弃 GIT 的主要原因。
其他
• 非 git 无法提供无网络的快照、回滚能力,对于离线开发不友好
• .svn/ 目录到处都是, .git/ 只有一个。但是,太多 .svn/ 在代码搜索等操作上,造成很多麻烦,一搜一 大堆同名函数在 SVN 内部文件里。
如何选择
为什么要使用Git
许多团队使用Git的原因很多,其中有很多。正如我们所描述的,它解决了最基本的版本控制问题。它使 开发人员可以在不重复工作的情况下同时处理相同的代码。对于本地操作来说这是快速的。 Git通常是大 学中使用的第一个版本控制系统(VCS)开发人员。大多数开发人员都知道常用的Git命令,例如克隆, 提交和推送。另外,它是免费的!
在过去的几年中,如雨后春笋般冒出了以开源软件货币化为使命的无数商业公司。 GitHub, GitLab和 Atlassian已使用Git完成了此任务,他们添加了不错的用户界面,代码审查工作流,多个存储库的管理功 能以及与Git的管道集成。
这些Git提供商中的每一个在个人免费用户中都比付费企业客户更受欢迎。 GitHub, GitLab和Atlassian 并不总是为企业软件开发团队服务,实践证明, Git的体系结构很难在这种环境下进行扩展。
何时使用Perforce (Helix Core)
当您具备以下条件时, Perforce是正确的版本控制系统:
大型代码库。
非代码资产,例如二进制文件或图形。
代码依赖性,尤其是跨组件。
广泛的代码重用,例如工件。
大型,地理位置各异的团队。
这就是Perforce擅长的地方。这是因为我们的版本控制是为具有大型代码库和复杂开发环境的大型团队 设计的。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/36598.html