我是新来的强制流。我已经通过网络浏览了一些文档而且没有清楚地了解perforce流的主要用途是什么。 任何人都可以帮我简要介绍一下perforce流。主要目的是什么?什么时候有用?
答案 0 :(得分:0)
如果您对上下文有所暗示,那么回答这个问题会更容易 - 您是否已经理解了在其他工具中使用的分支和合并的一般概念,或者更好的是,您是否已经熟悉Perforce如何在没有流的情况下在Perforce中工作?如果是这样,我可以给你一些关于流的好处相对于手动管理分支和客户端视图的细节。
对于这个答案,虽然我会假设你是一般的分支新手,只会引导你参加2006年Google Tech Talk" The Change of Change&#34 ;,这是Perforce流的首席架构师之一Laura Wingerd给出了这一点。这是在Perforce(2011.1版本)实际实现流之前大约5年,但是关于管理软件变体之间的变化流程意味着什么的核心思想就在那里。希望通过流文档的附加上下文,您已经阅读过它,并且会更清楚为什么它在现实世界中有用。
答案 1 :(得分:0)
如果您已熟悉Perforce中的分支,则您知道分支可以是任意文件集合,由两种类型的视图管理:
p4 integrate src... dst...
这是一个临时分支视图。)从技术角度来看,流的主要目的是消除维护这些观点的工作。使用“经典”Perforce分支,您可以声明文件路径//depot/main/...
是您的主线,//depot/rel1/...
是您的rel1
版本分支,然后定义这样的视图:
Branch: rel1
View:
//depot/main/... //depot/rel1/...
Client: main-ws
View:
//depot/main/... //main-ws/...
Client: rel1-ws
View:
//depot/rel1/... //rel1-ws/...
如果您想拥有一个工作区并在两个分支之间切换,您可以执行以下操作:
p4 client -t rel1-ws
p4 sync
(do work in rel1)
p4 submit
p4 client -t main-ws
p4 sync
p4 integ -r -b rel1
这当然是一个非常简单的示例 - 如果您决定要从分支中取消映射某些文件,那么您必须在客户端规范和可能的分支视图中进行更改,如果您创建更多分支更多客户规格和更多分支规格等。
使用流,相同的简单双分支设置由两个流表示:
Stream: //depot/main
Parent: none
Type: mainline
Paths:
share ...
Stream: //depot/rel1
Parent: //depot/main
Type: release
Paths:
share ...
要在两个流中完成工作:
p4 switch rel1
(do work in rel1)
p4 submit
p4 switch main
p4 merge --from rel1
管理分支和客户端视图的所有任务都是自动处理的 - switch
命令生成一个适合于命名流的客户端视图并同步它(它还可以处理正在进行的工作,或者可选地将其重定位到类似于git checkout
命令的新流,merge
命令生成一个分支视图,该视图在当前流和命名源流之间进行映射。
还处理了更复杂的观点;例如,如果要忽略与这些流相关联的所有工作空间中的所有.o
个文件,只需将其添加到//depot/main
流:
Ignored:
.o
这会自动由所有子流继承,并反映在所有自动生成的客户端和分支视图中(就像一次向所有客户端视图添加-//depot/branch/....o //client/...
行)。
您可以使用流定义做更多的事情,但希望这能为您提供一般性的想法 - 重点是采取人们为管理与代码行相关的视图所做的所有工作,并集中/自动化它以方便使用,以及提供良好的语法糖,如p4 switch
和p4 merge --from
。