Perforce 有一个 DVCS 模式,有点像 git,但除非有令人信服的理由不这样做(比如有限的连接性或服务器上的严重资源限制),否则使用 Perforce 的典型方法是直接在中央服务器上做所有事情(“远程存储库”)。 p4 submit
在典型模型中基本上是git commit
+ git push
,因为您的“提交”直接发送到远程服务器。
因此,当您创建分支时,您也在服务器上执行此操作。Perforce 中的分支只是从其他文件夹复制的文件夹(在这个简单的复制操作之上构建了许多合并跟踪语义),因此要从//depot/main
您创建新的功能分支可能会运行以下命令:
p4 integ //depot/main/... //depot/features/road-rev/...
p4 submit
这会在 depot 中创建一个新分支(作为名为 的文件夹features/road-rev
),并将其同步到您的工作区,所以现在您需要做的就是:
cd features/road-rev
p4 add <new files>
p4 edit <existing files>
<etc>
p4 submit
您在分支中所做的更改与road-rev
分支完全分开main
。要从您那里获取更新的更改,只需重复您用来创建它main
的相同命令,但添加一个来处理需要合并的文件:integ
resolve
p4 integ //depot/main/... //depot/features/road-rev/...
p4 resolve -as
p4 resolve
p4 submit
如果您以相反的方向运行集成命令(即交换参数的顺序),则更改将在另一个方向合并。一旦你理解了可以integrate
用来将更改从一组文件任意推送到另一组文件的概念,分支就是一个非常简单的事情,即定义不同的文件集(通常作为顶级文件夹)来表示不同的分支代码变体——这称为“文件间分支”。
如果您的管理员已将您的 depot 配置为使用流,则工作流程会有所不同(流是“托管分支”,感觉更像您习惯的 git 分支——您只能拥有一个流一次在您的工作区中,并且您使用switch
命令在它们之间切换,而不是定义将任意分支/文件映射到工作区的任意部分的客户端视图)。您仍然拥有不同分支变体的相同底层表示,即库中的不同文件夹,但顶部有一大堆语法糖,隐藏了该表示。要从流中创建功能分支,您需要执行以下操作:
p4 switch -c road-rev
这类似于git checkout -b road-rev
。