2

熟悉git,第一次使用perforce。

我正在开发自己的功能,我不想将其推送到主线远程存储库。

我需要像 git 远程分支这样的东西:

  1. 我可以提交我的更改。就像是git commit

  2. 我可以推送到不合并的远程私有分支。就像是git push remote my-branch

  3. 可以将主线的更改合并到我的分支中。之类的git merge master

我正在尝试理解 p4 分支,但是与 和 之间的术语混淆了p4 integrate很多p4 branch。此外,所有导致p4 submit提交到主线而不是我的分支的步骤。有没有办法提交到远程私人分支?

我在这里尝试了 p4 分支步骤:https ://www.perforce.com/perforce/doc.973/cmdguide/html/branchin.htm 但它并没有导致提交到私有远程分支。

4

1 回答 1

4

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的相同命令,但添加一个来处理需要合并的文件:integresolve

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

于 2019-10-10T22:36:17.837 回答