我是第一次使用perforce streams。我在网上浏览了一些文档,并不清楚perforce streams的主要用途是什么。有人能帮我简单介绍一下perforce streams吗?主要目的是什么?当它有用的时候?
发布于 2018-02-05 23:41:28
如果您提供了一些上下文提示,那么回答这个问题会更容易一些--您是否已经理解了在其他工具中使用的分支和合并的一般概念,或者更好的是,您是否已经熟悉分支在没有流的情况下在Perforce中的工作方式?如果是这样的话,我可以给您一些关于流相对于手动管理分支和客户机视图的好处的细节。
对于这个问题的答案,我假设你对分支是个新手,并简单地把你带到2006年的Google技术演讲"The Flow of Change",这是由Perforce streams的首席架构师之一Laura Wingerd给出的。这是在流在Perforce ( 2011.1版本)中实际实现之前的大约5年,但围绕它意味着管理软件变体之间的变更流的核心思想都在那里。希望有了你已经读过的流文档的附加上下文,它会更清楚为什么这在现实世界中是有用的。
发布于 2018-02-06 23:59:35
如果您已经熟悉Perforce中的分支,就会知道分支可以是任意的文件集合,由两种类型的视图管理:
p4 integrate src... dst...,这也是一个即席分支视图。)从技术角度来看,streams的主要目的是消除维护这些视图的工作。使用“经典的”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当然,这是一个非常简单的示例--如果您决定取消某些文件与分支的映射,则必须在客户端规范和分支视图中进行更改,如果您创建了更多的分支,即更多的客户端规范和更多的分支规范,等等。
对于streams,相同的简单双分支设置由两个streams表示:
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这样的好语法糖。
https://stackoverflow.com/questions/48623273
复制相似问题