我有一个有趣的问题,其中有人使用 perforce 作为存储库开发了一些代码,并对尚未签入的源代码进行了一些更改。然而,他们不想在原始代码上签入,而是想创建一个单独的“工作区”是当前工作区的克隆,其中文件仍同步,但新创建的文件。
我知道这并不是应该如何使用 perforce,但这只是一个问题,我必须看看它是否可能,或者将来是否有更好的方法来缓解这种情况。这似乎应该是可能的,因为这就是为什么您有单独的客户端,每个客户端都有自己的“本地”副本。什么不是同一台机器上的两个“本地”副本?
我有一个有趣的问题,其中有人使用 perforce 作为存储库开发了一些代码,并对尚未签入的源代码进行了一些更改。然而,他们不想在原始代码上签入,而是想创建一个单独的“工作区”是当前工作区的克隆,其中文件仍同步,但新创建的文件。
我知道这并不是应该如何使用 perforce,但这只是一个问题,我必须看看它是否可能,或者将来是否有更好的方法来缓解这种情况。这似乎应该是可能的,因为这就是为什么您有单独的客户端,每个客户端都有自己的“本地”副本。什么不是同一台机器上的两个“本地”副本?
在 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
上面的命令在原始结帐时获取了副本,因此您现在需要复制文件或搁置和取消搁置它们。
只要您在同一台机器上执行此操作,副本就很简单,您需要遵循以下基本步骤:
projectB
确保您已检索到( p4 sync ...
in workstation2
)的最新副本workstation2
目录p4 reconcile ...
命令检查任何已修改的文件以进行编辑p4 commit ...
将修改后的文件检入到projectB
存储库中workstation2
现在您已经安全地签入了新项目中的修改文件,您可能希望恢复原始项目中的任何更改,以免该目录处于混乱状态。为此,请切换到旧工作区并使用p4 revert ...
.
如果您不想保持与旧代码的连接,该过程将为您节省几个步骤(基本上您创建新客户端,复制文件,然后复制p4 add ...
它们,但由于您知道文件的来源,因此保留历史可能是值得的。