Perforce ( P4 ) 将树中的特定版本移动到树的顶部

Posted

技术标签:

【中文标题】Perforce ( P4 ) 将树中的特定版本移动到树的顶部【英文标题】:Perforce ( P4 ) Moving a particular version in tree to top of the tree 【发布时间】:2019-10-19 06:02:00 【问题描述】:

假设我在 P4 中有一个文件 foo.c 的版本,树的顶部版本是 foo.c#8。

出于某种原因,我想将 foo.c#4 移动为 foo.c#9(本质上是将版本 4 移动到树的顶部)。

一种方法是手动完成(同步版本 4,复制,然后同步到树的顶部,编辑和复制 4 并重新提交)。

有没有更优雅的方式将 foo.c#4 推到树顶?

【问题讨论】:

【参考方案1】:

听起来您想撤消修订 #5 到 #head:

p4 undo foo.c#5,#head
p4 submit

或者,如果您愿意,您想撤消所有大于 #4 的修订:

p4 undo "foo.c#>4"
p4 submit

或者,如果您特别想撤消 #5 到 #8,即使存在以后的修订:

p4 undo foo.c#5,#8
p4 submit

如果有更高版本,则最后一个变体将需要sync/resolve 冲突解决步骤(因此您可以在忽略#5 到#8 的情况下合并到更高版本中)。

如果你使用的是几年前的服务器版本,你可以试试p4 copy

p4 copy foo.c#4 foo.c
p4 submit

如果您使用的服务器版本比这更早,这是通过常规旧 p4 sync 执行此操作的最优雅方法:

p4 sync foo.c#4
p4 edit foo.c
p4 sync foo.c#head
p4 resolve -ay
p4 submit

请注意,与undo 示例类似,您可以选择将sync foo.c#head 转换为syncresolve -ay 一个中间版本,然后是syncresolve -am 更高版本,如果您愿意的话构建一个“撤消”某些更改同时保留后续更改的修订。

这是一种使用p4 print 的方法(简单案例的命令较少,但 IMO 不太优雅,因为它不能扩展到更复杂的用例):

p4 edit foo.c
p4 print -o foo.c foo.c#4
p4 submit

【讨论】:

感谢您的回复。不幸的是,我使用的 P4version 似乎不支持“p4 undo”。在线阅读手册页,看起来您的解决方案有效,但我无法利用它 您使用的服务器版本有多早? (p4 info,“服务器版本”行。) 添加了一些其他食谱。如果您使用的是支持它的服务器版本,p4 undo 是迄今为止最好的选择,因为它会在元数据中留下永久记录,将其与普通的 edit 操作区分开来。

以上是关于Perforce ( P4 ) 将树中的特定版本移动到树的顶部的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perforce 树中查找未跟踪的文件? (模拟svn状态)

Perforce P4V 将新文件添加到软件仓库

使用 p4 软件仓库的 perforce 软件仓库未显示在客户端上

perforce:同步到较早的版本

如何获取待处理的 Perforce 更改列表中所有文件的差异?

Perforce使用命令行修改changelist的Description