Perforce:将未提交的更改移动到其他流

时间:2013-04-23 10:05:48

标签: perforce perforce-stream

Perforce是否有一种很好的方法可以在提交之前将未提交的更改移动到其他流(相当于git stashgit checkout otherbranchgit stash pop)?

我目前在本地(非专有)检出文件并进行编辑。我已经尝试搁置它们,然后尝试将它们取消搁置到目标流中,但我得到“文件不在客户端视图中”。当我查看更改列表(搁置或未搁置)时,文件都包含包含原始流的路径。

我的目标流是我刚刚创建的目标流,是原始流的父级。我正在使用P4V。我安装的Perforce Visual Components的版本是123.57.9578,当我从命令行运行p4时,它显示“Server 2012.2 / 551823”。如有必要,我可以添加更多信息。

4 个答案:

答案 0 :(得分:5)

您可以使用p4 unshelve命令使用-S选项将更改列表中的搁置文件重新映射到另一个流。例如:

p4 unshelve -s <changlist#-with-shelved-files> -S //depot/streamname

不确定这是否仅适用于特定版本或以上版本。但是,我们无法通过P4V找到办法。

答案 1 :(得分:4)

这里的其他答案都是正确的,但是他们并没有警告你,你不能放弃任何流,不要在任何不相关的流上搁置。特别是,原始海报询问了错误消息&#34;文件不在客户端视图中#34;当您没有选择正确的映射时,这是P4V显示的错误消息。

以下是找到正确映射的技巧:您的unhelve流必须与搁置的流有直接的父/子关系,并且您必须在&#34; Map中选择描述该关系的流规范使用流的未删节文件...&#34;对话框的一部分。这意味着可能需要多次跳转才能从原始的搁置流到目标流。

以下是一个具体的示例:假设您有Dev-1搁置的文件要移至Dev-2。这两个Dev流都是Main的直接子节点。您无法将Dev-1个文件直接取消隐藏到Dev-2,首先您必须取消搁置并暂时重新搁置到Main,因为Dev流规范都描述了他们之间的关系Main而不是彼此。

因此,您将Dev-1的文件取消隐藏到Main中,使用&#34;使用流Dev-1&#34;映射未被控制的文件因为该规范描述了被遍历的关系。然后,将文件搁置到Main,然后将工作区切换到Dev-2。现在,您可以取消搁置搁置文件的Main版本,使用&#34;使用流Dev-2&#34;映射未设置的文件,因为该规范描述了来自Main的直接关系到Dev-2

使用多个跃点,您可以访问网络中的任何其他连接流。这不像git stashgit stash pop那么容易,但请记住,Git假设文件名不会在git分支之间发生变化,而Perforce允许每个跃点随意更改文件和文件夹的映射

答案 2 :(得分:1)

我认为搁置/搁置技术需要2013.1服务器,而不是2012.2服务器。您应该通过Perforce技术支持确认这一点。

答案 3 :(得分:1)

如果您出于某种原因使用P4V比使用命令行更舒服,可以使用GUI完成解决方案az2tonez,至少在P4V 2014.2中。

  1. 保留您的变更集,并确保在工作区中没有签出其他文件。
  2. 在“Streams”标签中,将工作区图标从当前流拖动到要将更改移动到的流,然后获取最新更改。
  3. 取消隐藏“待处理”标签中的文件。在选项下,选择“映射未保留的文件”,然后选择要从移动变更集的流,并按“取消搁置”。
  4. 使用来源解析文件。
  5. 提交您的更改,瞧!您的更改现在应该在另一个流中。