Perforce:需要一些关于Perforce streams的介绍吗

Perforce:需要一些关于Perforce streams的介绍吗,perforce,Perforce,我对perforce streams不熟悉。我浏览了一些网上文档,但不清楚perforce streams的主要用途是什么。 有谁能帮我简单介绍一下perforce streams吗。主要目的是什么?什么时候有用 如果您给出一些上下文提示,那么回答这个问题会更容易些——您是否已经理解了分支和合并的一般概念,因为它们在其他工具中使用过,或者更好的是,您是否已经熟悉在没有流的Perforce中分支是如何工作的?如果是这样的话,我可以向您详细介绍streams相对于手动管理分支和客户端视图的好处 对于

我对perforce streams不熟悉。我浏览了一些网上文档,但不清楚perforce streams的主要用途是什么。
有谁能帮我简单介绍一下perforce streams吗。主要目的是什么?什么时候有用

如果您给出一些上下文提示,那么回答这个问题会更容易些——您是否已经理解了分支和合并的一般概念,因为它们在其他工具中使用过,或者更好的是,您是否已经熟悉在没有流的Perforce中分支是如何工作的?如果是这样的话,我可以向您详细介绍streams相对于手动管理分支和客户端视图的好处

对于这个问题的答案,我假设您对分支基本上是新手,并将简单地引导您进入2006年谷歌技术讲座“变革的流程”,这是由Perforce streams的首席架构师之一Laura Wingerd给出的。这大约是在streams在Perforce(2011.1版本)中实际实施之前的5年,但是关于如何管理软件变体之间的变更流的核心思想都存在。希望通过您已经阅读的流文档的附加上下文,可以更清楚地了解为什么这在现实世界中是有用的


如果您已经熟悉Perforce中的分支,您会发现分支可以是任意文件集合,由两种类型的视图管理:

  • 一个或多个客户端视图,用于定义同步分支所需映射到工作区的文件集
  • 一个或多个分支视图,用于定义如何合并此分支和其他分支之间的更改。(即使您没有定义永久分支规范,如果您运行
    p4 integrate src…dst…
    这是一个特殊的分支视图。)
  • 从技术角度来看,streams的主要目的是消除维护这些视图的工作。使用“classic”性能分支,您可以声明文件路径
    //depot/main/..
    为主线,
    //depot/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开关
    p4合并--

    @Sam Stafford,感谢您的回复。我了解perforce中的分支和合并概念。但我想知道更多关于溪流的信息,它的目的是什么?使用这种流有什么好处?如果你能举个例子就好了。分支和流的主要区别是什么?在perforce中,stream优于branch的优点是什么。我将把这个答案留给其他搜索这个问题的人,他们没有那个上下文。:)@山姆·斯塔福德,非常感谢:)这真的很有帮助。疑问:如果我们想处理流,父流和子流应该具有相同的文件夹结构吗?也就是说,“主”分支有A、B、C文件夹,“私有”分支是主流的子级,也应该有A、B、C作为必填项,或者我们可以根据自己的意愿在子流中拥有自己的观点?使用streams在空间消耗方面有什么优势吗?@Sam Stafford,目前我们在classic perforce,我们希望将我们的项目转移到perforce streams。在这样做之前,我们需要解决什么问题吗?通常建议您在streams中启动一个新项目,而不是尝试迁移一个现有项目——没有用户友好的迁移路径(您可以这样做,但您需要对Perforce的数据模型如何工作有真正深入的了解,或者需要有人提供帮助).Streams确实允许您筛选/重新映射父流和子流之间的关系,这可以间接节省空间。我建议您更详细地研究流功能,并考虑它们与您的项目的关系。感谢更新Sam:)如果我们将classic depot移至perforce streams,那么这些文件的历史也将进入streams?流遵循父子关系,对吗?这意味着父分支和子分支应该具有相同的层次结构(即两个分支应该具有相同的文件夹结构)?在我的要求中,我只想创建仅包含部分内容的子流。如果我这么做的话,那就是表明变化需要从主要方面进行整合。我们不能工作吗