实习就要结束了,收获之一就是学会了使用Perforce!
Perforce SCM System是一款构建于可伸缩客户/服务器结构之上的软件配置管理工具。仅仅应用
TCP/IP,开发人员就能够通过多种Perforce客户端(几种平台的GUI、WEB、或命令行)访问
Perforce服务器。Perforce能够被快速和容易地部署,即使对大型或分布式的站点,也只要求最小限
度的管理。Perforce可以使用在50多个操作系统中,它包括版本控制、工作空间管理、变更处理和
一个强大的分支模型。这里介绍的P4V是perforce的一种可以跨平台使用的客户端。
和其他的版本控制工具一样,perforce也是基于CS架构,有一个中央服务器,其他客户端通过网络来连接,如下图:
1.服务器连接
填写正确的服务器名、端口、用户名及工作空间设置。
2.客户端主要工作区
上图所示的是Perforce的主界面,大部分的操作都是在该界面下完成的。该界面分为三个区域:
区域1:显示Deport以及Workspace中的内容,称为目录区。
区域2:列出文件的一些操作属性,称为操作区。
区域3:给出所执行操作的提示信息,称为信息区。
目录区
目录区由Depot目录区和Workspace目录区组成。
--->Depot目录区
显示了服务器上可见目录结构(用户权限设置不同,可见目录也不同),这也与Workspace View映
射文件路径有关系,可以指定显示文件路径。在这里,可以执行的操作包括: check out, submit,
Get Latest Revision, Revert Files等操作。
--->Workspace目录区
显示了与服务器上文件有映射关系的,本地工作空间的目录结构,这与Workspace View也有关系。
操作同上。
操作区
操作区中的内容主要由如下的几种工作区组成。
---> Pending changelists 工作区
这里显示当前用户正在修改的文件和其他开发者正在修改的文件。
当然,你只需要关心你自己的project即可。当你执行:Mark for Add,check out等操作时,这些信息
就会显示在changlist列表中显示,并由不同的图标显示其状态。如果你修改完成后,执行submit就
可提交更新文件;但也可以执行revert放弃所作的修改。
--->Submitted changelists 工作区
显示了近期所有项目组成员对项目所做的操作。
从中可以获得如:changlist号、修改时间、修改文件的内容、修改原因及修改人等信息。
---> Workspace工作区
在该工作区中可显示所有连接在服务器上的客户端工作空间。
在此工作区内可以执行创建、编辑修改、删除用户工作空间等操作。(前提是有执行的权限。)
--->History工作区
查看指定文件的变更历史信息。
---> Labels工作区
查看目前所有的label号。
在此工作区中可完成label的创建,内容的修改等。(前提是有执行此操作的权限。)
--->Branchs工作区
查看目前所有的Branch号。
在此工作区中完成Branch的创建,修改、删除等。(前提是有执行此操作的权限。)
除了以上说明的几种工作区,还有Files、Jobs等工作区。包括上述的
六种在内,这几个工作区窗口可以通过界面上,如下图所示的选项卡相互切换:
信息区
由一个窗口(Pane windows)组成。
Pane windows
这是一个非常有用的窗口,称之为消息窗口区,最底下的那个窗口就是。你的任何操作的信息都会
出现在这里,包括success, warning, error等信息。特别是执行某个操作失败后,这里的信息是至关
重要的。一般情况下,都可以根据这里的信息来处理一些意外情况或者是不规范操作。
3. Perforce的日常操作
3.1添加(Add)文件夹及文件
--->在Workspace中选定要添加的文件夹/文件上右击,选择“Mark for Add”,添加文件。
将添加文件行为显示在pending changelists工作区中。在工作区上增加好文件夹和文件后,图标上有
个红色的加号标志 ,表明此时增加的文件夹和文件还仅仅存在客户端的工作区中,还没有提交到服
务器上的仓库中。所以,右键点击需要提交的文件夹或文件,选择Submit,提交完毕后,文件此时
才真正提交到服务器上的仓库中。
--->提交(Submit)添加文件/文件夹
在Submit的过程中,需要写下该变更的描述,这点很重要!描述信息的详细,将大大的方便对文件
的查询和跟踪。且在描述的开头用英文说明此次操作行为的类型。如用Add表示添加;Modify表示
修改;Build表示编译等等。
点击Submit后,即可看到文件前面的红色加号已经去掉了,并且在Reversion栏中已经显示出该文件
的版本号。此时,文件的右下角有个绿色的标识,表示该文件当前显示的是最新版本。
3.2文件修改
如果需要对文件进行修改,首先将需要修改的文件Check Out出来到本机,才可以进行修改。
--->右键点击需要修改的文件,选择Check Out命令。
此时被Check Out出来的文件左上方有个红色钩标志,表明该文件已经成功的被您Check Out出来了
。如果是文件的右上方有个蓝色钩标志,说明该文件已经被别人Check Out出来了。由于Perforce支
持并行操作,所以您仍可以将别人已经Check Out的文件再次Check Out到您本机进行修改。
--->双击打开已经Check Out出来的文件,对其进行修改。
修改完毕后,右键点击该文件,选择Submit,写下变更列表的描述。
之后,选择save,然后发code review:
在同行审阅approve后,再提交。
ps:Collaborator是建立在CodeCollaborator基础之上的代码最全面审查工具,Collaborator能为开发团队轻松、有效地完成代码审查,
这使得实际中代码审查应用更大,自然能获得更好的代码。关键因素是用户体验,它允许团队其它成员为作者轻松、协作地提供反馈,跟踪每一条评论并采取应对措施。
3. 点击Submit,文件提交到服务器,增加了一个新版本。
在这里需要提醒大家的是,如果将某个文件Check Out出来后,并没有做任何修改,这时请不要做
Submit操作,而是点击右键选择Revert If Unchanged,这样提交后就不会增加该文件的版本数了,
否则服务器将会为一个没有做任何修改的文件增加一个版本。
建议在每次修改后思考:为什么要做这些修改?如果所作的修改是没有意义的,那么,建议不要将
这个文件提交(submit),而是Revert你所做的修改。
3.3 合并文件
合并操作主要用来解决并行开发过程中变更产生的冲突。
例如,当有多人需要对同一个文件同时执行Check Out操作时,在Submit该文件时,Perforce可能会
报错。现举例如下:有A、B两人需要同时对CallKeep.cpp文件执行Check Out操作。
此时可以看到文件CallKeep.cpp的左上角和右上角分别有钩,这说明该文件正在被至少两个人执行
Check Out操作。由于Perforce支持并行操作,所以A和B在执行Check Out时不会发生冲突,但
Submit该文件时就可能报错了。第一个执行Submit操作的人不会出现问题,例如A可以正常提交,
但如果B修改的内容和A修改的相冲突,则B执行Submit时报错,并且会提示服务器上已经有最新的
版本了(即A刚刚提交的版本)
此时B获得最新版本后再提交,仍报错。
且在文件上打个问号,说明服务器不知道该怎么办,因为B需要提交的版本内容和A的相冲突,需要
B给予解决。
这时,选中该文件,右键点击,选择Resolve操作。
Perforce提供了三种自动解决方案,分别是“Accept Merged”、“Accept Yours”和“Accept Theirs”。当
然,你也可以查看和别人冲突的地方在哪里,进行手动解决冲突。点击Run Merge Tool,显示如下
图所示界面。
区域1:显示的是A提交版本中的内容,即目前服务器上的最新版本。
区域2:显示的是A和B同时Check out文件CallKeep.cpp时,当时服务器上最新版本内容,也就是A、
B修改的基础版本。
区域3:显示的是B自己修改的文件内容。
区域4:显示了三个版本所有冲突的地方,B可以在此基础上对文件做修改,给出解决方案。
选择红线框中的按钮来决定所保留的代码。解决完冲突后再Submit即可。
3.4查询文件历史版本
1. 如果想要查询某个文件的任何一个历史版本,右键点击这个文件,选择Get Revision。
2. 写下需要查看的历史版本号,然后点击Get Revision。
此时Perforce为您取出任何一个你想要的历史版本。
3.5比较两个文件的区别
比较操作主要是用来查看某个文件到底做了哪些修改:从中你可以看出添加了什么,删除了什么等
等。
---> 比较两个不同文件或一个文件不同版本之间的区别。右键点击需要比较的文件,选择Diff
Files命令。
---> 按照下图所示,设置需要比较的文件名称或文件的版本等。
--->点击Diff就可以看到如下图所示的所有不同处,包括增加、删减或修改的操作。
在这里需要注意的是:Perforce暂时不支持多个文件的比较。
3.6 同步服务器上文件
如果您在服务器上找到自己所需要的文件,并希望把这些文件同步到本机,这时就需要首先选择好
工作区Workspace,然后右键点击需要下载的文件夹,选中Get Lastest Revision命令,就可以完成
文件夹的同步操作了。
有时候同步不到最新的版本,可以选择force操作:
3.7 获取Label标识版本文件
提取出标记特定label下的文件。
--->在工具栏上找到 的标识,在右上方的Labels工作区中找到所需的label号。
---> 获取指定label下特定文件。 右键选中指定label,在菜单中选择“Get Revision...”。
---> 在弹出的如下对话框中,选择需要签出的文件。
---> 点击“Add”按钮,选择添加标记该label的文件。