如何创建私有远程 perforce 分支并推送到它?

How to create private remote perforce branches and push to it?

熟悉git,第一次使用perforce。

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

我需要类似 git 的远程分支,其中:

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

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

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

  4. 这样的东西

我试图理解 p4 分支,但在 p4 integratep4 branch 之间经常混淆术语。此外,所有步骤都会导致 p4 submit 提交到主线而不是我的分支。 有没有办法提交到远程私有分支?

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

Perforce 有一个有点像 git 的 DVCS 模式,但除非有令人信服的理由(比如有限的连接或服务器上的严重资源限制),否则使用 Perforce 的典型方法是一切都直接在中央服务器上("remote repository")。典型模型中的 p4 submit 本质上是 git commit + git push,因为您的 "commit" 直接进入远程服务器。

因此,当您创建分支时,您也在服务器上执行此操作。 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 将更改从一组文件任意推送到另一组文件的概念,分支就是定义不同文件集(通常作为顶级文件夹)以表示不同分支的非常简单的事情代码的变体——这称为 "inter-file branching".

如果您的管理员已将您的 depot 配置为使用 streams,则工作流程会有点不同(流是 "managed branches",感觉更像您习惯的 git 分支——您的工作空间中一次只能有一个流,并且您使用 switch 命令在它们之间切换,而不是定义一个 client view 将任意 branches/files 映射到工作区的任意部分)。您仍然具有不同分支变体的相同底层表示,这些变体是软件仓库中的不同文件夹,但是顶部有一大堆语法糖可以隐藏该表示。要从流中创建功能分支,您需要执行以下操作:

p4 switch -c road-rev

类似于git checkout -b road-rev