谈谈Perforce

实习就要结束了,收获之一就是学会了使用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的文件。

时间: 2024-10-15 13:00:11

谈谈Perforce的相关文章

谈谈对CAP定理的理解

谈谈对CAP定理的理解 CAP定理的常规解释是任何分布式系统只能在一致性(Consitency),可用性(Availability)和分区容忍性(Partition Tolerance)中三选二.这个解释很让人费解,笔者在看了一些文章后谈谈我对它的理解,还请斧正. 从问题出发 假设我们用一台服务器A对外提供存储服务,为了避免这台服务器宕机导致服务不可用,我们又在另外一台服务器B上运行了同样的存储服务.每次用户在往服务器A写入数据的时候,A都往服务器B上写一份,然后再返回客户端.一切都运行得很好,

谈谈我眼中的安徽企腾信息技术集成有限公司

在这里工作一段时间后,说说自己眼中的安徽企腾,我尽量本着客观的原则,不带任何主观因素与感情色彩. 首先,先说说规模,所谓的分成售前与售后,其实就是虚张声势,售前不过是一些笔记本的售后维修,售后与售前基本上没什么关系.而售后,销售加上技术,最多时也不过7个人.平时一些项目,大一点,一些不能做的直接外包出去,小一点的项目,所谓的"施工队",就是全体总动员. 公司里做了好几块业务,其中一块是飕飕商用路由,刚开始,想的是多么好,但是最后却被浇了一盆冷水,市场根本不接受,唯一做了一家宾馆,还是连

谈谈JS里的{ }大括号和[ ]中括号的用法

谈谈JS里的{ }大括号和[ ]中括号的用法,理解后就可以看懂JSON结构了. 一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen","AGE":"28"}; 上面声明了一个名为"LangShen"的对象,多个属性或函数用,(逗号)隔开,因为是对象的属性, 所以访问时,应该用.(点)来层层访问:LangShe

《谈谈认同》这个文章有点晦涩 写的不太好

认同是一个人主观能动性的一个影响因素.至于人的主观能动性还有什么影响因素,先不讨论,而且我也没学过也没想过.在可选择事物的主观能动性上,认同应该算最基本也是影响最大的了.回到主题,我们来谈谈认同.        认同有三个表现:第一.口头认同.第二.行动认同.第三.心理认同.简单的理解,就是口头认同只说认同,但不做,事前一套事后一套.行动认同就是说也说了,干也干了,但心里不这样想.心理认同就是口手心合一.但我们都清楚认同其实从本质上讲只有一种,就是心理认同.只有心理认同才是真正的认同.但是在工作

谈谈vector容器的三种遍历方法

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector容器是最简单的顺序容器,其使用方法类似于数组,实际上vector的底层实现就是采用动态数组.在编写程序的过程中,常常会变量容器中的元素,那么如何遍历这些元素呢?本文给出三种遍历方法. 方法一:采用下标遍历 由于vector容器就是对一个动态数组的包装,所以在vector容器的内部,重载了[]运算符,函数原型为:reference operator [] (size_type n);所以我们可以采用类似于数组的方式来访问vector容

谈谈怎么使用JSONP

JSONP是什么,其实它是目前主流的实现跨域通信的解决方案. 因为我们都知道,在我们使用ajax去发起HTTP请求的时候,是不可以跨域的.也就是不能在不同域名下.端口等去请求.如果我们强行这么做的话,它是会报错. 这里举个例子. function createXHR() { var xhr = new XMLHttpRequest(); return xhr; } function ajax(url) { var xhr = createXHR(); xhr.onreadystatechange

你读到了什么:谈谈阅读的空与实

開始写点文字后,有些文章有人留言评论说:「都是些空话,正确的废话」,而有些文章有人又会留言评论说:「就喜欢这种.满满的干货.实在」. 究竟什么是空还是实蛮让我困惑的,思考了一段时间后今天就想谈谈我从阅读文章中究竟读到了些什么? 不管是别人评价是空话还是实在,于写作者我而言仅仅负责将自己思考后的观点清晰的表达,而至于是用「干货」还是「湿货」的形式来表达事实上取决于支撑观点的内容本身. 代入去想我知道评论说文章太空的人本身对阅读的期待是能从中收获实用甚或立马用的上的东西.凡是怀有相似期待的读者多半是

从面试题谈谈js的闭包,原型

最近群里有小伙伴分享了两道面试题,这里我谈谈自己的理解,废话不多说,上第一题: var n = 10; var obj = { n:20, fn:(function(){ this.n += 2; n *= 3; return function(){ this.n *= 2; n += 1; console.log(n) } })(n) } var fn = obj.fn; fn(); obj.fn() console.log(n,obj.n) 这个题目中,定义的obj对象的fn属性是个自执行的

谈谈我对Linux系统学习的历程回顾

众所周知,Windows 和Linux 是目前最流行的2个操作系统.Windows系统适合普通用户,它的优势是图形化界面,简单易用,使用起来门槛很低,很容易上手,所以,windows占有了大多数普通用户群体.而Linux 被誉为黑客的操作系统,因其稳定和命令行操作的高效性而广泛用于开发工作,占有绝大多数开发者群体.当然,关于这两大系统的优缺点,这里就不再赘述,我主要想谈谈我的Linux的学习历程参考书籍<Linux就该这么学>和心得体会. Linux初体验 一年前,我还不知道Linux为何物,