这个 Git 工作流程的 Perforce 等效是什么?Shelves(货架)?

3
我进行了相当大的重构,构建了一个二进制文件并提交给QA进行测试。在等待QA结果的过程中,我想开始开发新的功能,并假设我可能需要根据QA结果返回更改一些内容。
在Git中,我会在分支`bigRefactor`上进行重构,基于该分支构建,提交给QA,然后从`bigRefactor`分支中创建`postBigRefactorNewFeature`分支并继续工作。当QA反馈所需更改时,我会切换回`bigRefactor`分支,进行所需更改,提交,然后切换到`postBigRefactorNewFeature`分支,使用`git rebase`或`git cherry-pick`将我的更改从`bigRefactor`分支合并到`postBigRefactorNewFeature`分支中。
在Perforce中,最好的方法是在描述为“big refactor”的变更列表A上搁置已用于QA的文件而不在本地还原,然后将本地更改(现在复制到搁置区)移动到描述为“post big refactor new feature”的新变更列表B中,然后继续工作。当QA反馈时,我必须在变更列表B中搁置正在工作的内容,还原,从变更列表A中取消搁置,进行所需更改,然后将搁置区中的文件以某种方式合并到工作区中。
据我所知,并没有办法将搁置区合并到工作区的当前状态。我该怎么做呢?
1个回答

1

是的,您可以使用架子作为迷你分支来使用您所描述的工作流程。 Perforce负责“某种方式合并架子中的文件”的部分。

只要您拥有足够新的服务器版本(我相信此功能是在2011.1版本中添加的,尽管可能比那晚一些),您就可以将架子上的更改合并到当前工作区状态中。

您可以将更改从货架合并到当前工作空间状态,只要您具有足够新的服务器版本(我相信此功能是在2011.1版本中添加的,尽管可能比那晚一些)。

您可以“取消存储到打开的文件”;当您取消存储具有对当前已打开文件进行编辑的文件的架子时,Perforce会安排在架子更改和您的打开文件之间进行解决。

总体过程与其他解决方案非常相似,并且非常容易使用。

以下是新功能的发布说明。

#299614 (Bug #38221, #39099) **
    Unshelving a file opened for edit over a file already opened
    for edit in the workspace is now allowed. A resolve record is
    created when unshelving, and the user must then run 'p4 resolve'
    to resolve the workspace files with the shelved files. 

最近的货架功能包括通过分支规范取消货架和直接提交未取消货架更改的能力。在最近的版本中,货架已经发生了很大的变化。

您可以设置一个小型测试服务器并进行实验,以便更详细地了解其工作原理,并在Perforce行为令人困惑时提出更精确的问题。

话虽如此,我的经验是,如果您的工作流程足够复杂,则使用“将货架用作小型分支”的方法会变得混乱,因此在某个时候只需创建分支即可。当然,Perforce完全支持分支,尽管具体机制与git不同。


谢谢您的回答。使用P4还有几个月,发现版本架构并不能很好地解决问题。不幸的是,Perforce分支在某些方面严重缺乏,例如,在分支上没有办法仅挑选两个版本之间的差异部分,所以如果我在分支上修复了一个漏洞作为重构的一部分,我无法将仅仅修复漏洞的部分带回主分支,因为Perforce想要合并整个文件,而不仅仅是修复漏洞的差异块。 - damian
我经常按照你所描述的进行挑选。我只需要执行以下命令:p4 integrate //depot/branch/...@=NNN //depot/main/...,其中NNN是我想要集成的特定变更列表。还有许多其他示例:有关更多详细信息,请参见“p4 help revisions”。 - Bryan Pendleton
在一个分支中,无法仅挑选出两个版本之间的差异。这意味着,如果我提交了 branch/file.cs#1、branch/file.cs#2 和 branch/file.cs#3,那么就无法仅将 #2 和 #3 之间的差异带到 main/file.cs 中,而忽略 #1 和 #2 之间的差异。 - damian
1
对我来说,'p4 integrate branch/file.cs#3,#3 main/file.cs' 正好做了正确的事情。但也许我还是误解了。也许你只需要更详细地说明一下,或者设置一个测试服务器并进行更多的尝试? 'p4 integrate' 的语法确实非常复杂,需要一段时间才能学会如何使用它。你尝试过使用可视化客户端,比如P4V吗? - Bryan Pendleton

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