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

Mik*_*ike 1 version-control perforce

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

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

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

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

Sam*_*ord 5

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

p4 undo foo.c#5,#head
p4 submit
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意,则要撤消所有高于#4的修订:

p4 undo "foo.c#>4"
p4 submit
Run Code Online (Sandbox Code Playgroud)

或者,即使您存在更高的修订版,如果您只是想撤消#5至#8,也可以:

p4 undo foo.c#5,#8
p4 submit
Run Code Online (Sandbox Code Playgroud)

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

如果您使用的服务器版本已经使用了几年以上,则可以尝试p4 copy

p4 copy foo.c#4 foo.c
p4 submit
Run Code Online (Sandbox Code Playgroud)

如果您使用的服务器版本早于该版本,则这是通过常规old进行操作的最优雅的方法p4 sync

p4 sync foo.c#4
p4 edit foo.c
p4 sync foo.c#head
p4 resolve -ay
p4 submit
Run Code Online (Sandbox Code Playgroud)

请注意,类似undo例子,在做的时候,你可以选择sync foo.c#headsyncresolve -ay中间版本,然后syncresolve -am更高版本,如果你想建立一个修订版,同时保持后来的“撤销”的某些变化。

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

p4 edit foo.c
p4 print -o foo.c foo.c#4
p4 submit
Run Code Online (Sandbox Code Playgroud)