【问题标题】:What is a perforce stream?什么是 perforce 流?
【发布时间】:2020-10-07 08:05:54
【问题描述】:

我只知道工作区是一个对象,它将服务器中的一组文件映射到用户的文件系统上。

之前用过git,还不太懂流的概念。它与git中的分支相同吗?那么如何向 Git 用户解释流?

【问题讨论】:

    标签: git version-control perforce perforce-stream


    【解决方案1】:

    如果您已经熟悉 Perforce 的文件间分支系统(即 Perforce 中的每个“分支”都是 depot 中的一组不同文件),那么很容易将流理解为自动管理的分支你。流定义了分支所在的 depot 目录、该分支的工作区视图是什么样的,以及更改如何传播到其他分支。 (在非托管的“经典”分支中,这些概念存在于每个分支中,但并未正式化;流为所有这些操作提供了一层语法糖和流程执行。)

    如果您完全不熟悉 Perforce 并且来自 git,是的,最简单的心理映射是“stream = branch”。使用p4 switch -c NEWBRANCH 代替git checkout -b NEWBRANCH,使用p4 switch BRANCH 代替git checkout BRANCH

    这是一个演示(从头开始,使用 p4 init)创建一个新流,对其进行更改,然后将该更改合并回主线:

    C:\Perforce\test4>p4 init -C1 -n
    Server bob-dvcs-1592407491 saved.
    
    C:\Perforce\test4>p4 switch -l
    main *
    
    C:\Perforce\test4>echo "here's a test file" > foo
    
    C:\Perforce\test4>p4 add foo
    //stream/main/foo#1 - opened for add
    
    C:\Perforce\test4>p4 submit -d "my first file!"
    Submitting change 1.
    Locking 1 files ...
    add //stream/main/foo#1
    Change 1 submitted.
    
    C:\Perforce\test4>p4 switch -c dev
    dev
    
    C:\Perforce\test4>p4 switch -l
    dev *
    main
    
    C:\Perforce\test4>p4 edit foo
    //stream/dev/foo#1 - opened for edit
    
    C:\Perforce\test4>echo "a change" >> foo
    
    C:\Perforce\test4>p4 submit -d "my first edit!"
    Submitting change 3.
    Locking 1 files ...
    edit //stream/dev/foo#2
    Change 3 submitted.
    
    C:\Perforce\test4>p4 filelog foo
    //stream/dev/foo
    ... #2 change 3 edit on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'my first edit!'
    ... ... copy into //stream/main/foo#2
    ... #1 change 2 branch on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'Populate //stream/dev.'
    ... ... branch from //stream/main/foo#1
    
    C:\Perforce\test4>p4 switch main
    
    C:\Perforce\test4>cat foo
    "here's a test file"
    
    C:\Perforce\test4>p4 merge --from dev
    //stream/main/foo#1 - integrate from //stream/dev/foo#2
    ... must resolve content from //stream/dev/foo#2
    
    C:\Perforce\test4>p4 resolve -am
    c:\Perforce\test4\foo - merging //stream/dev/foo#2
    Diff chunks: 0 yours + 1 theirs + 0 both + 0 conflicting
    //bob-dvcs-1592407491/foo - copy from //stream/dev/foo
    
    C:\Perforce\test4>p4 submit -d "my first merge!"
    Submitting change 4.
    Locking 1 files ...
    integrate //stream/main/foo#2
    Change 4 submitted.
    
    C:\Perforce\test4>cat foo
    "here's a test file"
    "a change"
    
    C:\Perforce\test4>p4 filelog foo
    //stream/main/foo
    ... #2 change 4 integrate on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'my first merge!'
    ... ... copy from //stream/dev/foo#2
    ... #1 change 1 add on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'my first file!'
    ... ... branch into //stream/dev/foo#1
    

    【讨论】:

    • 主线是什么?将工作区移动到流中意味着什么?切换到新分支时,是否与将当前工作目录和迄今为止所做的更改移动到新分支相同?
    • 1) 它是主流,类似于 git 中的master 2) 那是p4 switch 3) 没有
    • 我将在我的帖子中添加一个演示;您可以在自己的环境中浏览它,然后希望对流是什么有一个很好的了解。 :)
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2020-03-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多