Version control 如何基于另一个挂起的变更列表创建Performce变更列表

Version control 如何基于另一个挂起的变更列表创建Performce变更列表,version-control,perforce,Version Control,Perforce,假设我已经完成了作业A的一些代码,但在代码被审阅之前,无法提交p4。现在我必须转到工作B,这取决于我在工作A中所做的更改 如何确保保存作业A的更改,以便以后可以单独提交(可能在一些进一步的更改之后),和仅将作业B的修改(差异A..B)保存到新的更改列表上(需要在某个时候搁置,以便也可以对其进行审查)我认为这在性能上是不可能的 一种解决方法是将您的工作空间复制两份。完成作业后,将变更列表搁置在第一个工作空间中。保留此代码副本,直到完成代码审阅 现在,移动到第二个工作空间,取消搁置作业A的已保存更改

假设我已经完成了作业A的一些代码,但在代码被审阅之前,无法提交
p4
。现在我必须转到工作B,这取决于我在工作A中所做的更改


如何确保保存作业A的更改,以便以后可以单独提交(可能在一些进一步的更改之后),仅将作业B的修改(差异A..B)保存到新的更改列表上(需要在某个时候搁置,以便也可以对其进行审查)我认为这在性能上是不可能的

一种解决方法是将您的工作空间复制两份。完成作业后,将变更列表搁置在第一个工作空间中。保留此代码副本,直到完成代码审阅

现在,移动到第二个工作空间,取消搁置作业A的已保存更改列表,并在其上对作业B进行任何更改


一旦作业A提交到服务器,在第二个工作空间执行p4同步,p4 diff将显示作业A上完成的更改。

这是一个很好的分支用例。试图用书架做任何事情的摩擦在于搁置的修订是无常的,所以你不能有基于它们的历史。如果创建分支,则可以将您的更改与其他人正在处理的文件隔离,但仍将其保存在永久位置

黄金法则是“不兼容提交策略上的分支”。在这种情况下,您需要提交未查看的工作(这样您就可以在上面做更多的工作),但是您所在的分支不允许未查看的工作,所以请创建一个新的分支

在这个例子中,我假设您正在使用流,因为它使一切都变得更快;对于非托管分支,同样的工作流程也会发生,只是需要输入更多的命令

所以,让我们假设您当前处于“主”流中,并且有未提交的更改。将您的更改引入一个新分支(假设您的名字是bob,我将称之为“dev bob”),如下所示:

p4 switch -r -c dev-bob
现在提交:

p4 submit
现在继续进行其他更改

要将更改放入“主”并搁置以供审阅,请执行以下操作:

p4 switch main
p4 merge --from dev-bob
p4 resolve -am
p4 shelve

要使一切都符合dev bob的特定更改“a”,您需要在merge命令中添加“@a”。

如果我能在这里发表我的意见的话

不应该存在阻止您提交代码的情况。作为一名开发人员,你应该能够在任何时候提交你想要的任何代码。代码应在提交后而不是之前进行审查。源代码管理的全部意义在于它控制源代码,一旦代码进入,您可以回滚、修改、删除它,但您有一条记录

如果你被迫跳转去做一些像你描述的那样基本的事情,那么你公司的工作流程就被破坏了,或者管理员除了最琐碎的方式外不知道如何使用Performance

有非常简单的方法可以使代码在被审查之前保持独立(分支是最简单的),但不受源代码控制并不是其中之一


想象一下,如果您无法签入代码,直到代码被审核后,github.com将如何停止运行。

您是否考虑过使用Performance对“克隆、获取、推送”的支持

您的服务器和客户端必须至少达到2015.1,但一旦达到,您可以在工作站上复制代码的克隆副本,提交对代码的各种更改,创建分支,将分支或托架推送到您的审阅服务器进行审阅,等等


除了在克隆和中央服务器之间复制更改外,您还可以将更改从一个DVCS实例复制到另一个DVCS实例,从而启用许多开发人员认为方便的DVCS工作流。

为此,您实际上不需要第二个工作区。一旦您搁置了这些文件,它们在服务器上就安全了。我想你可以删除你的第一句话,因为这个技巧满足了发问者的所有需求;你的回答是什么?注意,其他答案中已经提出了几种方法;没有任何迹象表明有任何东西“阻止您提交代码”。当然。这就是为什么其他答案建议使用工具架、分支机构、审阅服务器、多个工作区、DVCS工作流等。在您最终提交给主分支机构之前,有很多协作方式。或者,您的答案是:“教育管理层,他们不应该有这样的限制性政策。”在这种情况下,很抱歉,一开始我不明白这一点;这肯定会解决最初的问题。