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

Version control Perforce(P4)将树中的特定版本移动到树的顶部,version-control,perforce,Version Control,Perforce,假设我在P4中有一个文件foo.c的版本,树的顶部版本是foo.c8 出于某种原因,我想将foo.c4移动为foo.c9,实际上是将版本4移动到树的顶部 一种方法是手动同步版本4,复制副本,然后同步到树的顶部,编辑并复制4,然后重新提交 有没有更优雅的方法将foo.c4推到树的顶部?听起来您想通过head撤消修订版5: p4 undo foo.c#5,#head p4 submit 或者,如果愿意,您希望撤消大于4的所有修订: p4 undo "foo.c#>4" p4 submit

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

出于某种原因,我想将foo.c4移动为foo.c9,实际上是将版本4移动到树的顶部

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


有没有更优雅的方法将foo.c4推到树的顶部?

听起来您想通过head撤消修订版5:

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
如果有更高版本,最后一个版本将需要同步/解决冲突解决步骤,以便您可以在忽略5到8的情况下合并到更高版本中

如果您使用的服务器版本已超过几年,您可以尝试p4 copy:

如果您使用的服务器版本甚至比该版本还要旧,下面是通过常规的旧p4同步实现此功能的最优雅的方法:

请注意,与“撤消”示例类似,如果要构造撤消某些更改同时保留后续更改的修订,则在执行sync foo.chead时可以选择同步并解析中间版本,然后同步并解析后续版本

这里有一种方法,可以使用p4打印较少的命令来完成简单的用例,但IMO不那么优雅,因为它不能扩展到更复杂的用例:

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

听起来像是要撤消修订版5到头部:

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
如果有更高版本,最后一个版本将需要同步/解决冲突解决步骤,以便您可以在忽略5到8的情况下合并到更高版本中

如果您使用的服务器版本已超过几年,您可以尝试p4 copy:

如果您使用的服务器版本甚至比该版本还要旧,下面是通过常规的旧p4同步实现此功能的最优雅的方法:

请注意,与“撤消”示例类似,如果要构造撤消某些更改同时保留后续更改的修订,则在执行sync foo.chead时可以选择同步并解析中间版本,然后同步并解析后续版本

这里有一种方法,可以使用p4打印较少的命令来完成简单的用例,但IMO不那么优雅,因为它不能扩展到更复杂的用例:

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

谢谢你的回复。不幸的是,我使用的p4版本似乎不支持“p4撤消”。在线阅读手册页,看起来您的解决方案可行,但我无法利用您使用的服务器版本有多古老?p4信息,服务器版本行。添加了一些其他配方。如果您使用的是支持p4 undo的服务器版本,那么p4 undo是目前为止最好的选择,因为它在元数据中留下永久记录,这与正常的编辑操作不同。感谢您的响应。不幸的是,我使用的p4版本似乎不支持“p4撤消”。在线阅读手册页,看起来您的解决方案可行,但我无法利用您使用的服务器版本有多古老?p4信息,服务器版本行。添加了一些其他配方。如果您使用的是支持p4 undo的服务器版本,那么p4 undo是目前为止最好的选择,因为它在元数据中留下永久记录,这与正常的编辑操作不同。