Perforce分支与Git分支

14

我是一名Git用户,想学习Perforce。

在Git中,用户可以从主分支进行检出,更改一些文件并将其推送到一个具有特定提交ID的不同分支上的服务器。

另一个Git用户可以使用其提交ID检出该新分支,并在其之上工作。

如何使用Perforce执行此操作?


2
你是使用流还是传统的Perforce分支?很多情况取决于你的操作模式和结构。在流中有轻量级分支,也可以使用存储来创建临时工作伪更改。因此,很多都取决于你的组织结构。 - gaige
3个回答

21

我是一名Git用户,正在尝试学习Perforce。

抱歉。

如何使用Perforce执行此操作?

我是一名更擅长使用Git而非Perforce的用户,如果有任何错误请指正。我强烈建议阅读Perforce的手册和教程

Perforce并不能像Git一样完全复制一个代码库状态来创建分支,在Perforce中,"分支"是基于文件的:也就是说,你可以将文件A分支到文件B,这时文件B会包含一个回溯到文件A的引用,表示 "我从这里来"。这个引用可以用于确定合并过程中的共同祖先。但是我的理解是,这些引用是基于每个文件的,你可以自由地将任何文件集成(合并)到任何其他文件中。而在Git中,"父提交"是你的回溯参考,但它是基于整个代码库的。

您可以使用p4 integrate 命令来分支一整组文件,并使用典型的Perforce语法(例如://depot/some/path/...)。通常,您会将一个目录整体分支到另一个目录中,例如://depot/main/my_project 分支到 //depot/release-1.0/my_project。Perforce并不关心路径的模式或合理性:这完全取决于您。

此外,您还可以使用 p4 branch 创建“分支规范”,这基本上是一种记录文件源集及其目的地以便更轻松进行分支处理的方法。(如果您采用发布示例,则可能希望最终合并更改或将更改进一步合并到发布中等)
我曾两次使用Perforce工具,与Git不同的是,分支是一个独特的难点,这里存在着一些文化差异。相对而言,分支相对较少。(我只看到它们被用于发布)我们没有将它们用于功能分支,除非是最大的功能;相比之下,对于我来说,“功能分支”通常是 “需要 >1 次提交”。

正如gaige在原问题的评论中所说,这取决于您的组织。Perforce是集中组织的,因此由中央实例决定是否需要功能分支、QA分支、发布分支等。通常的做法是不让大型组织的用户决定分支(有多少个和在哪里)。但是您可以考虑使用git-p4桥接器。 - pitseeker
@pitseeker:“通常不让用户对分支(数量和位置)进行控制”这是一般惯例(虽然听起来有些极端,但不幸的是并不难以置信)...(组织通常有一个要遵循的模式,因为否则事情很快就会变得混乱)。你描述的方式很不幸,似乎会阻止工程师工作的关键部分。 - Thanatos
6
“我很抱歉。”这句话让我笑得比应有的还要多。 - Cloud
1
由于没有提及Streams而被踩,特别是要看“使用任务流进行轻量级分支”。 - Ident
1
教程链接已失效。 - Den-Jason

2
如果你和我一样鄙视Perforce,那么你应该继续使用Git。 我应该说,我使用Git更加舒适。
我目前使用Git-P4 + 我编写的一组Bash脚本(git-p4-helpers)。
我遵循this workflow的简化变体:
$ git checkout p4-integration
$ git p4 sync
$ git p4 rebase
$ git tag last-green <SHA1> # last green build
$ git rebase last-green develop
$ git checkout -b <my-feature>
$ git commit # as needed
# Sync Git->P4 (see Github:git-p4-helpers)
# Submit using P4

还有一件事我还没能想明白,就是如何从Git-P4快速提交到P4(每次尝试都需要花费很长时间来执行git p4 sync以及其他一些非常烦人的操作,这使得我直接从我的Git存储库提交到P4非常困难)。因此,我编写了一个脚本来同步我的Git存储库和P4工作区,然后使用P4进行提交。

目前,这允许我在处理更改时使用Git的所有功能,然后只需使用P4进行提交。


0

请记住,Perforce 会为分支创建一个副本,而 Git 只会创建指向新分支的指针,这样速度更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接