perforce可以创建另一个工作区,其中包含单独维护的现有工作区的克隆吗?

时间:2013-08-27 19:06:25

标签: perforce perforce-client-spec perforce-integrate

我有一个有趣的问题,其中某人使用perforce作为存储库开发了一些代码,并对尚未签入的源代码进行了一些更改。然而,他们想要检查原始代码,而不是创建一个单独的“工作区”,它是当前工作区的克隆,文件仍然是同步的,但是新创建的文件。

我知道这并不是应该如何使用perforce,但这只是一个问题,我必须看看它是否有可能,或者是否有更好的方法可以在未来缓解这种情况。似乎它应该是可能的,因为这就是为什么你有单独的客户,每个客户都有自己的“本地”副本。什么不是同一台机器上的两个“本地”副本?

1 个答案:

答案 0 :(得分:1)

在Perforce中,工作空间(客户端)本身仅用于在用户的本地副本和服务器上的副本之间创建映射。因此,如果您的文件来自//depot/projectA,您的客户将拥有以下地图:

//depot/projectA/... //workstation/...

如果您有大量更改并希望将其作为新代码签入,您可以选择几个选项。最常见的是,您可以通过分支原始文件然后检入修改后的版本来完成此操作。如果您确切知道签出文件的确切时间(例如标签或更改列表#),则可以通过将当前projectA分为projectB来轻松完成此操作:

p4 integrate //depot/projectA/...@<change# or label> //depot/projectB/...

这基本上会创建projectB作为新项目,但包含来自projectA的所有资源。

现在,要处理projectB,您将不得不向现有客户端添加新映射,或者您将不得不为该计算机创建第二个客户端。在回答您的问题时,在机器上安装第二个客户端以获取源代码的不同副本甚至不同的项目是完全合理的。但是,就Perforce而言,它相当于该机器上的第二个用户在存储库的相同(或不同)部分工作。

所以,为此,我们假设您选择创建一个新客户端。这样做,但在硬盘驱动器上使用不同的根位置,并映射projectB而不是projectA(假设客户端名称为workstation2

//depot/projectB/... //workstation2/...

请记住,在使用perforce时,您需要小心使用正确的客户端。这可以通过多种方式完成,包括设置环境变量(如果使用shell)或更改p4v中的“工作站”。

现在,最后一部分,将您的更改从已审核的projectA版本移至projectB。由于上面的integrate命令在原始结账时获取了副本,因此您现在需要将文件复制或搁置并取消搁置。

只要您在同一台计算机上执行此操作,副本就很简单,并且您需要遵循以下基本步骤:

  1. 确保您检索到projectB的最新副本(p4 sync ...中的workstation2
  2. 将修改后的文件从原始位置复制到workstation2目录
  3. 使用p4 reconcile ...命令检出编辑任何已修改的文件
  4. 使用p4 commit ...将修改后的文件从projectB
  5. 检入workstation2存储库

    现在您已经安全地检查了新项目中的已修改文件,您可能希望还原原始项目中的任何更改,以使该目录不会处于混乱状态。为此,请切换到旧工作区并使用p4 revert ...

    如果你不想保持与旧代码的连接,那么这个过程将为你节省几个步骤(基本上你创建新客户端,复制文件然后p4 add ...,但是你知道文件的来源,保持历史可能是值得的。