8

Perforce 中是否有一种好方法可以在提交之前将未提交的更改移动到不同的流(相当于git stash, git checkout otherbranch, git stash pop)?

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

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

4

4 回答 4

6

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

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

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

于 2013-05-22T21:24:19.570 回答
4

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

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

这是一个具体的例子:假设您有Dev-1要移动到的文件搁置到Dev-2. 这两个 Dev 流都是Main. 您不能将Dev-1的文件直接Dev-2取消搁置到 中,首先您必须取消搁置并暂时重新搁置到Main中,因为 Dev 流规范都描述了它们之间的关系,Main而不是彼此。

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

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

于 2016-01-28T18:23:02.163 回答
2

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

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

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

于 2013-04-23T13:52:52.397 回答