Perforce应用程序用来在文件信息库与个人用户工作站之间传输文件
Perforce版本管理服务管理公用文件信息库(或称之为depots)。
该服务维护一个数据库以记录变更日志、用户权限以及某个用户在某个时点签出某个文件。
Perforce服务通过本地操作系统来管理数据库和版本化文件,因而不需要专门的文件系统或者卷。
作用:与版本管理服务进行通讯,管理用户工作站上存储了depot中部分文件的本地拷贝的客户端工作区。
Perforce应用程序允许你签入签出文件、 管理冲突、生成开发分支、错误追踪以及变更请求等等,它包括:
当你把文件读入工作区时,Perforce应用程序从公用文件信息库请求文件,同时记录你(和其他用户)读取了哪些文件。
Perforce应用程序并不需要保持与版本 管理服务的永久连接。
要使用Perforce,你必须配置你的Perforce应用程序使它连接到Perforce服务,在本地硬盘上指定一个区域作为工作区,选择你工作所需的depot文件的子集。
Perforce 应用程序通过 TCP/IP 与服务通讯,也可以选择使用 SSL 来提高安全性。Perforce 应用程序需要知道与之通讯的Perforce信息库的通讯协议、地址和端口。
地址和端口被保存在P4PORT环境变量中。根据你所用的应用程序,配置该变量的过程被称为“设置端口”或“连接到服务”。
Perforce应用程序的文档和在线帮助包含了如何设置端口的信息。
为了控制depot文件在工作区根目录下显示的位置,你必须把公用版本管理服务中的文件和文 件夹映射到本地硬盘的相应区域中。
创建工作区并没有把任何文件从depot传到你的电脑上。工作区及其视图仅仅定义映射以控制 文件传输时depot和工作区的关系。
如果想了解更多关于如何配置映射来定义工作区的话,你可以参照Perforce应用程序的文档和 在线帮助。
工作区的其他选项使你可以控制Perforce各种操作的默认行为。
如果想了解更多关于这些及其他选项的话,你可以参照专门的Perforce应用程序文档
为了将depot文件下载到工作区,你必须从版本管理服务读取。在Perforce上,用depot文件更新工作区通常被称为“同步你的工作区”。
在其他系统上,称之为“更新”、“获取最新版本” 或仅称“获取文件”。
当你同步你的工作区时,你的Perforce应用程序使用工作区视图来把depot文件映射到你的工作区文件上,根据工作区内容比较结果,增删改工作区文件以使你的工作区保持与depot同步。
同步你的工作区时读取每个文件的最新(“head”)版本的拷贝。
在其他版本管理系统上,也被称之为 “tip”版本。
在默认状态下,同步到工作区的文件是只读的,在你签出后才变为可写的。
Perforce应用程序也支持各种选项,使你可以获取文件的较早版本,或在特定时点保存的版本, 或其他用户已加了用户定义标签的版本集。
Perforce应用程序使用一套规则来定义depot文件与工作区文件的位置关系。
当你指定Perforce文件时:
文件通过客户端语法或depot语法指定时总是以双斜杠(//)开头,后面跟着客户端工作区名或 depot名,以及到客户端工作区根目录或depot目录树顶端的相对路径的文件路径名全称。
不管本地 操作系统用的是什么分隔符,客户端语法以及depot语法上的路径成分都是以单斜杠(/)分隔。
语法 | 例子 |
---|---|
Depot语法 | //depot/main/src/file.c |
客户端语法 | //myworkspace/module/file.c |
本地语法 | C:\Projects\working\module\file.c |
当把depot文件映射到本地硬盘时,工作区名是工作区根目录的别名。
例如,当工作区名为myworkspace,工作区根目录为C:\Projects\working时,通过View //depot/main/src/... //myworkspace/module/...
把depot文件 //depot/main/src/file.c 映射到工作区 C:\Projects\working\module\file.c 上。
View 表示的是Stream 视图,详情可在本文 ‘使用Steam’ 章节查阅
你可以在配置Perforce工作区视图时使用这些通配符。
通配符 | 意义 | 意义 |
---|---|---|
* | 匹配所有字符但不包括目录内的斜杠。 | /src/*.c 匹配 /src/file.c 和/src/file2.c, |
… | 匹配当前工作目录下的 所有文件和子文件夹。 | /src/… 匹配 /src下的所有文件和子文件夹 |
%%1- %%9 | 位置指定符,用来替换视图中的部分文件名。 | 映射 /%%1/%%2/… 到 /%%2/%%1/…将把/web/images/file.gif 映射到 /images/web/file.gif |
这些通配符也用在命令行客户端上的文件指定。
如果想了解更多关于Perforce语法及通配符的 话,你可以参照《Perforce命令参考》。
Perforce用#字符来表示文件版本。
标识符file.c#3/4表示你当前已经把file.c的#3版本同步到了工作区,file.c的最近版本是#4。
语法 | 指定 | 备注 |
---|---|---|
file.c#3 | file.c的第三个版本 | “同步到file.c的第三个版本” |
file.c#head | Depot中file.c的最近版本 | 从depot获取文件的最新版本,把工作区同步成head版本。 |
file.c#have | 最后同步到工作区的file.c的 版本,这是have版本。 | 当你废弃一个文件的变更时,Perforce应用程序把 你工作区中的文件恢复到have版本。 |
file.c#none file.c#0 | 文件file.c的不存在的或空的版本。 | 当你用Perforce应用程序从工作区删除文件时,你实际上在工作区中把该文件的版本同步到空版本。 |
head, have和null版本 (#head, #have和#none)的语法被用在命令行客户端以及图形应用程序的状态窗口中。
详细请参照《P4用户指南》。
Perforce文件类型包含6种基本文件类型。
在默认情况下,当某人把文件追加到depot中时,Perforce试图自动判别文件的类型。
你通过把文件打开编辑为新的文件类型从而可以改变文件的类型。
6种基本文件类型可以附加修饰符(如+w, +x, +k及其它)用来控制诸如锁定行为、工作区内的文件权限或者版本在服务中如何存储。
《Perforce命令参考》中包含了文件类型以及可用修饰符的完整列表。
Changelist是Perforce中的基本工作单位。
所有版本管理系统共通的文件编辑基本操作(如编辑文件、添加文件、删除文件、恢复变更以及签入文件)都在Changelist中执行。
在你对工作区中的文件进行操作之前,你必须先在changelist中打开该文件。Changelist包含了一系列文件、它们的版本号、你对这些文件的变更以及描述你所进行工作的注释。
Changelists有两个用途:
如果你在修改某个软件时需要修改三个文件,那你就在一个changelist中打开这三个文件。
Perforce changelist是不可分割的事务。如果一个changelist涉及三个文件,要么这三个文 件的变更都被提交到depot,要么都没有被提交。
在changelist提交期间Perforce客户端与服务器端的连接被中断时,整个提交失败。
未提交到depot中去的changelist是作业中的changelist。
已提交到depot中的包含变更的changelist是已提交changelist。
每个changelist都有一个changelist编号(由Perforce生成)和changelist注释(由执行该变更的用户提供)。
当你在Perforce中打开一个文件时,该文件在默认的changelist中被打开。
当你把文件签入 depot时默认changelist被赋予一个changelist编号。
为了编辑文件,你把该文件签出到一个changelist。
Perforce应用程序使客户端工作区的该文件拷贝变为可写,并通知公用服务你已经把该文件打开为编辑。
为了添加文件,你在工作区创建文件并在一个changelist中把它标记为追加目的。
Perforce 应用程序决定文件类型(你可以重设该文件类型),并通知公用服务你准备添加文件。
为了删除文件,你在一个changelist中把它标记为删除目的。文件立即被从工作区中删除。
Perforce应用程序通知版本管理服务你准备删除文件,但直到你提交了该changelist之后,该文件才在depot中被标记为已删除。
被删除的文件实际上并没有从depot中移除。你可以通过同步之前的版本到工作区来恢复已删除文件。
你可以通过恢复文件来废弃你对文件所做的任何变更。
恢复文件把该文件从changelist中删除并把你工作区中的文件拷贝恢复到你最后同步到工作区的版本。
如果你恢复一个打开为编辑或标记为删除的文件,你最后同步的文件版本将被恢复到工作区。
如果你恢复一个标记为添加的文件,该文件从changelist中删除,但文件的本地拷贝将保留在工作区中。
你可以通过提交该 changelist把你的工作签入到depot中。不存在部分提交的changelist。
如果你的变更与别的用户较早提交的变更产生冲突,Perforce将要求你解决冲突后重新提交该changelist。
冲突解决的过程允许你选择需要做的事情:
根据你的请求,Perforce将对这两个冲突的文本文件以及产生这两个冲突文件的文件进行三路合并。
三路合并过程有助于解决文本文件的变更冲突,但对图像或编译代码之类的二进制文件不一定有效。
如果你所处理文件的合并无效,你可以锁定这些文件以免别的用户的修改影响你的工作。
Perforce支持两种类型的文件锁定:
如果想了解更多关于文件锁定、以独占方式打开文件类型修饰符以及typemap表单的话,你可 以参照《Perforce命令参考》以及《系统管理员手册》。
p4 diff和p4 diffs命令产生与UNIX和Linux系统中的标准diff命令类似的输出。
其它的Perforce 客户端程序(包括P4V)含有P4Merge,能提供文件差分的图形化视图。
文件的历史用一系列文件版本表示,每个文件一个版本。
每个文件版本与一个changelist关联。 你可以通过工作区中的版本来比较文件,也可以通过任何存储在depot中的版本来比较
文件夹的历史用一系列changelist表示。文件夹没有单个的版本号。
相反的,每个包含至少一个文件的changelist都被看做文件夹历史的一部分。
Perforce拥有语法格式,用来指定某个文件通过提交带编号的changelist而在depot中存在,或是被打上某个易记的标签,或是某个日期和时间点的。
这些语法格式(@changelist, @labelname, 或 @date, 或 #start,end)通常只用在命令行客户端上,但它们也出现在其他Perforce应用程序的状态窗口中。
详情请参照《P4用户指南》。
codeline是一起演变的关联文件集。
为了把相关文件按某个目的归类,比如作为新产品或发布 版本,你可以创建分支。
为了在分支间复制变更,你可以反映changelist。
为了产生某个特定状态的文件的快照,你可以创建标签,或通过指定日期或changelist编号来指定文件集合。
分支是管理两个或更多相关文件集合的变更的方法。
Perforce Inter-File Branching机制使你在把任何文件集拷贝到depot新位置时,一个文件集的变更可以被复制或反映到另一个文件集。
新的文件集(或codeline)与原有的文件单独开发,但通过反映的办法,一个codeline中的变更可以复制到另一个codeline。
为了创建codeline或开发分支,决定哪些文件属于该分支(源文件)并把那些文件反映到新的 codeline以创建目标文件。Perforce服务器在changelist中“以分支/同步为目的打开目标文件”。
反映还能让Perforce执行文件的“偷懒拷贝”。当你分支文件时,版本管理服务实际上并没有保留文件的两个拷贝——它保留源文件以及记录源文件和目标文件关系的指针。
偷懒拷贝使分支成为低负荷操作,版本管理服务不需要记录文件的两个拷贝。
你可以用类似于创建codelines的方法通过反映在相关codelines之间复制变更。
为了把发布分支上所做的工作复制到主线上,你可以通过解决发布分支和主线上所做变更引起 的所有冲突,把//depot/rel1.0上的源文件反映到//depot/main中。
工作区中的目标文件的版本被称为“yours”,depot中的源文件的版本被称为“theirs”。当 这些文件的变更没有冲突时,变更能自动被合并。当发生冲突时,你必须选择接受哪个变更:
Perforce提供两种分支机制:利用文件式样反映和利用分支映射反映
P4V的版本图功能是使分支间的文件历史可视化的方便途径。
Perforce streams是组成项目、codeline以及组件和文件的结构化容器。Perforce命令行客户端以及P4V之类的应用程序为streams提供了广泛的支持。
如果想了解使 用streams工作的详细信息的话,你可以参照《Perforce命令参考》、p4 command line help 和 P4V online help。
使用Streams有如下好处:
Perforce streams为以下四个问题提供解决方案,从而改进了Perforce的默认分支模型:
Streams并不保证效率和确定性,但一个好的层次结构控制了哪些需要分支并保证变更传递的 正确性。
想利用streams工作,你要执行下列步骤:
你(主要)利用下列命令来管理streams:
其他接收stream参数的命令如下:
如果想了解命令语法和标示的详细信息的话,你可以参照《Perforce命令参考》或使用p4 help commandname命令。
你可以用p4 help streamintro命令来了解大概。
或者访问这里here
首先创建一个stream depot。
Stream depots除了以下几点外与本地depots相同:
接着,创建分支层次中的每个stream,定义stream式样,指定stream名、stream双亲和stream 类型。
默认情况下,stream从其双亲继承文件结构和内容。
为了满足进一步的要求,你可以通过定义路径映射来指定映射,该映射重定义stream包含的文件路径。
Stream类型标志着相对固定。目前支持下列的stream类型:
为配置stream所含文件,你需要定义stream视图。视图由一系列路径组成,你对这些路径赋予控制它们特性的下列类型:
在定义了mainline stream后,你通过追加文件或反映文件,把它们拷贝到较不稳定的子 streams或合并到较稳定的双亲从而复制该stream。
一般的,你先定义并复制mainline,然后在mainline下方创建开发streams。
你通过从mainline 合并来保持开发streams为最新。
当开发工作稳定时,你把它拷贝到主线。
当需要准备发表版本时, 你可以创建发布stream并在其中使发表版本稳定,然后作为发布stream的子stream创建开发stream 并在其中修改缺陷。
虽然Perforce的分支机制相对简单,但分支的理论可以相对复杂。
什么时候创建分支?代码变更在什么时点从一个codeline复制到另一个codeline?谁负责执行合并?
这些问题对任何版本管理系统而言都是共通的,但答案需要不断地学习才能理解。
Perforce包含一个叫做jobs的基本缺陷跟踪系统。
Perforce job主要负责任务描述,诸如缺陷 修改或变更请求之类。
Perforce的任务跟踪机制允许你把一个或多个任务链接到changelist上以实 现任务所指定的工作。
关联job和changelist有助于团队了解任务是否已完成,何时完成的,谁负责该任务,哪些文件版本跟该任务有关。
当changelist被提交时,与changelist关联的job被标记为closed。
可以定制job系统所追踪的信息内容和类型;Perforce管理员可以添加、修改或删除Perforce 作业所用的字段。
详情请参照《系统管理员指南》。
也可以把Perforce与第三方缺陷跟踪和工作流系统整合
P4DTG(Perforce缺陷跟踪平台) 是包含图形化配置编辑器和复制引擎的综合平台。详情请参照这里
Perforce标签是加上标签的文件版本的集合,它允许你在工作区内复制特定的文件组。
详情请参照《P4 用户指南》。
Perforce应用程序带有选项,允许你指定所喜欢的文本编辑器或合并工具。
详情请参照《Perforce应用程序》的文档。
Perforce提供权限表,以防未经许可的或无意的访问。
权限表决定哪些Perforce命令可以执行, 在哪些文件上由谁在哪个工作站执行。
Perforce管理员可以在Perforce命令行客户端上利用p4 protect命令,或者用Perforce管理工具P4Admin来设置权限。
详情请参照《系统管理员指南》。
该共享版本管理服务根据它所支持的用户数而获得许可。
该许可证信息保存在服务器根目录中的叫做license的文件中。license文件是由Perforce软件提供的普通文本文件。
如果没有license文件,Perforce版本管理服务限制为20个用户/20个客户端工作区(文件数无限制),或用户数和工作区数量无限制(但文件数限制在1000个以内)。
详情请参照《系统管理员指南》或联系技术支持。
为了从所有Perforce应用程序中获得在线帮助:
可以从这里获得Perforce文档
Perforce论坛是用户提问并接收其他用户信息的场所: