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

Perforce 性能:将未提交的更改移动到其他流,perforce,perforce-stream,Perforce,Perforce Stream,在提交未提交的更改之前,Performance是否有一个好方法将其移动到另一个流中(相当于git stash,git checkout otherbranch,git stash pop) 我目前在本地(非独占)签出并编辑了这些文件。我尝试过搁置它们,然后尝试将它们取消搁置到目标流中,但我得到的结果是“文件不在客户端视图中”。当我查看变更列表(搁置或不搁置)时,所有文件都有包含原始流的路径 我的目标流是我刚刚创建的一个,它是原始流的子流。我用的是P4V。我安装的Perforce Visual C

在提交未提交的更改之前,Performance是否有一个好方法将其移动到另一个流中(相当于
git stash
git checkout otherbranch
git stash pop

我目前在本地(非独占)签出并编辑了这些文件。我尝试过搁置它们,然后尝试将它们取消搁置到目标流中,但我得到的结果是“文件不在客户端视图中”。当我查看变更列表(搁置或不搁置)时,所有文件都有包含原始流的路径


我的目标流是我刚刚创建的一个,它是原始流的子流。我用的是P4V。我安装的Perforce Visual Components的版本是123.57.9578,当我从命令行运行p4时,它会显示“Server 2012.2/551823”。如果需要,我可以添加更多信息。

我相信搁置/取消搁置技术需要2013.1服务器,而不是2012.2服务器。您应该向Perforce技术支持确认这一点。

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

p4 unshelve -s <changlist#-with-shelved-files> -S //depot/streamname
p4取消搁置-s-s//depot/streamname

不确定这是否仅在特定版本或更高版本中可用。但是,我们无法找到通过P4V实现的方法。

如果出于某种原因,您使用P4V比使用命令行更为方便,az2tonez提供的解决方案可以通过GUI实现,至少在P4V 2014.2中是这样

  • 搁置更改集,并确保没有在工作区中签出其他文件
  • 在“流”选项卡中,将工作区图标从当前流拖动到要将更改移动到的流,并获取最新更改
  • 取消搁置“挂起”选项卡中的文件。在“选项”下选择“映射取消搁置的文件”,并选择要从中移动更改集的流,然后按“取消搁置”
  • 使用源解析文件
  • 提交您的更改,瞧!您的更改现在应该在另一个流中

  • 这里的其他答案是正确的,但它们并没有警告您不能从任何流中搁置,而在任何不相关的流中取消搁置。特别是,原始海报询问了错误消息“文件不在客户端视图中”,这是P4V在未选择正确映射时显示的错误消息

    以下是找到正确映射的技巧:取消搁置的流必须与搁置的流具有直接的父/子关系,并且必须在对话框的“使用流映射取消搁置的文件…”部分中选择描述该关系的流规范。这意味着从原始搁置流到目标流可能需要多跳

    这里有一个具体的例子:假设您将文件搁置在
    Dev-1
    中,您希望将其移动到
    Dev-2
    。这两个Dev流都是
    Main
    的直接子级。您不能将
    Dev-1
    的文件直接取消搁置到
    Dev-2
    ,首先您必须取消搁置并临时重新搁置到
    Main
    ,因为Dev流规范都是根据
    Main
    描述它们之间的关系,而不是相互描述

    因此,您可以使用“使用stream
    Dev-1
    映射取消搁置的文件”将
    Dev-1
    的文件取消搁置到
    Main
    ,因为该规范描述了正在遍历的关系。然后,将文件搁置到
    Main
    ,然后将工作区切换到
    Dev-2
    。现在,您可以使用“使用stream
    Dev-2
    映射取消搁置的文件”来取消搁置
    Main
    版本的搁置文件,因为该规范描述了从
    Main
    Dev-2
    的直接关系


    通过多跳,您可以连接到网络中的任何其他连接流。这不像
    git stash
    git stash pop
    那么简单,但是请记住,git假设文件名在git分支之间不会更改,而Perforce允许每个跃点任意更改文件和文件夹的映射。

    谢谢您的回答。不幸的是,我似乎要等到下周才能确认这一点,因为我们的“Perforce king”目前正在举行Perforce会议:PShelving在Perforce的旧版本上工作。但是,您只能取消搁置到包含分支根的同一路径,因此无法在另一个分支中取消搁置。谢谢您的回答。我无法评论,因为我已经离开了,不再使用Perforce,但我想说的是,根据我的经验,在这种情况下,Git可以很好地处理重命名和移动的文件。当然,Perforce有自己的优势(尤其是局部观点),但这似乎不是其中之一!这将在提交取消搁置的文件时将工作区更改为源工作区。但它会保留未提交的搁置文件,并将更改列表提交到目标流。您需要在目标流的工作区中获取最新版本。