删除后如何在Perforce中恢复到项目的早期版本?

时间:2011-08-12 12:54:27

标签: perforce

假设我在//depot/MyProject下有一个项目。在变更清单1001中,该项目对方向进行了重大改变,改变了一切。在2001年的变更清单中,得到了p4 delete d。该仓库现在处于变化3000处。

我想将//depot/MyProject恢复到更改列表1000的状态。具体来说,我希望修订历史记录事实,即更改3001是更改1000的集成 - 即最后一个版本这个项目在重大变革之前。

Perforce可以做到这一点吗?或者我是否必须将其重命名为//depot/MyProjectOriginal,因为//depot/MyProject现在已被所有已删除的修订版所污染?

(对p4 integrate //depot/MyProject/...@1000 //depot/MyProject/...的天真尝试失败,并且“所有修订版已经整合”消息)

5 个答案:

答案 0 :(得分:5)

您无法强制进行整合。

您有两个选择:您可以使用changelist 1000作为基础创建分支;或同步到更改列表1000,检出所有文件,然后提交(a.k.a回滚)。

选项1

如果您确实希望更改的历史记录在1001-3000之间(即从更改列表1000重新开始),那么这是更好的选择。使用P4V,创建一个新的branchspec,然后执行从当前项目到更改列表1000的新分支的集成。这将作为更改列表3001提交,当您比较修订版本之间的差异时,您将看到1001-3000之间的变化。

在P4可视化工具中,这将在1000处显示为新的分支创建。

选项2

同步到更改列表1000,检出所有文件,然后提交。不应该有任何冲突需要解决。这将作为更改列表3001提交,然而当您查看历史记录时,您将看到所有内容。

我希望这是有道理的,有任何疑问,请问。

答案 1 :(得分:2)

我不相信你可以像这样将文件整合在一起。我认为你有两种选择。

如果您愿意移动文件,可以执行

p4 integ //depot/MyProject/...@1000 //depot/MyOriginal/Project/...

这将把更改列表1000中的MyProject集成到新位置。

如果您想将项目保持在同一个地方,您也可以这样做。这在p4v中非常简单 - 您可以右键单击工作区或库视图中的文件夹,然后选择“回滚...”。在随后的对话框中,您可以选择更改列表(或日期,修订版等)以将文件夹回滚到。在你的情况下,我认为你会选择更改列表1000.将文件粘贴到一个新的待定更改列表中(我认为这总是很好的做法)。然后你可以运行一个preveiw(看看会发生什么),将内容保存到一个新的更改列表(以便你可以在提交之前检查文件内容),或者只是去破坏并拉动触发器并提交(我通常不会推荐这个。)

HTH

答案 2 :(得分:2)

只是做:

p4 copy //depot/MyProject/...@1000 //depot/MyProject/...

这也是一个很好的修订图。

答案 3 :(得分:1)

虽然有一个已接受的答案和许多其他解决方案,但它们都不适合我,因为我需要回滚一个大目录(使用GB数据)

这是我使用的方式,适用于大目录: (建议在新的和干净的工作区中进行,但不是严格要求)

假设要回滚的目录是// depot / foo / bar,并且您想要回滚到更改列表1234

  • 确保没有人锁定任何文件,并确保您尝试回滚的目录存在于客户端规范中
  • p4 copy -v //depot/foo/bar/...@1234 //depot/foo/bar/...
  • p4 submit

p4 copy -v是解决方案的核心。它告诉Perforce服务器执行虚拟副本,这意味着Perforce会复制文件,但实际上并不在您的工作区中。这样可以避免文件内容的大量数据传输(复制和提交时)。在我的情况下,通过在P4V中使用“回滚”(这是非虚拟副本),它只花了一个多小时进行复制,一个多小时用于提交我的文件夹。使用虚拟副本,整个过程花了我大约1分钟。

最重要的是,它保持着明智的历史。您可以看到正在更新和回滚的文件,以及之前的所有历史记录。

答案 4 :(得分:0)

使用 p4 integrate -f //depot/MyProject/...@1000 //depot/MyProject/...

-f标志表示强制集成,即使它们已经集成。 来自http://www.perforce.com/perforce/doc.current/manuals/cmdref/integrate.html