【问题标题】:How to revert to an earlier revision of a project in Perforce following a deletion?删除后如何在 Perforce 中恢复到项目的早期版本?
【发布时间】:2011-08-12 12:54:27
【问题描述】:

假设我在//depot/MyProject 下有一个项目。在更改列表 1001 中,该项目的方向发生了重大变化,改变了它的一切。在 2001 年的更改列表中,它得到了 p4 deleted。仓库现在在零钱 3000 处。

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

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

(对p4 integrate //depot/MyProject/...@1000 //depot/MyProject/... 的天真尝试失败并显示“所有修订版已集成”消息)

【问题讨论】:

    标签: perforce


    【解决方案1】:

    您不能强制集成。

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

    选项 1

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

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

    选项 2

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

    我希望这是有道理的,有任何问题,请提出。

    【讨论】:

    • 最后我选择了选项 2,因为这样我可以保留旧的目录名称。选项 1 会更干净,但感谢您确认它不能在原始目录中 - 我想也许它只是我。
    【解决方案2】:

    我不相信您可以像这样将文件相互叠加。我认为你有两个选择。

    如果你愿意移动文件,你可以做一个

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

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

    如果您想将项目保留在同一个地方,您也可以这样做。这在 p4v 中非常简单——您可以右键单击工作区或仓库视图中的文件夹,然后选择“回滚...”。在随后的对话框中,您可以选择一个更改列表(或日期、修订等)以将文件夹回滚到。在您的情况下,我认为您会选择更改列表 1000。将文件粘贴到新的待处理更改列表中(我认为这始终是一个好习惯)。然后,您可以运行 preveiw(查看会发生什么),将内容保存到新的更改列表(以便您可以在提交之前检查文件内容),或者干脆放弃并扣动扳机并提交(我通常不会推荐这个)。

    HTH

    【讨论】:

    • 第二个选项基本上是重新添加文件,就好像它们是全新的一样吗?
    • 我不确定您所说的“全新”是什么意思。第二个选项将使这些文件的主要版本与它们在更改列表@1000 中的内容相匹配。它们并不是新的,因为它们只是同一棵树中的另一个修订版。
    【解决方案3】:

    只要做:

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

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

    【讨论】:

      【解决方案4】:

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

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

      假设要回滚的目录是 //depot/foo/bar 并且你想回滚到 changelist 1234

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

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

      最重要的是,它保留了合理的历史记录。您可以看到您的文件正在更新和回滚,并且所有以前的历史记录都存在。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-19
          • 1970-01-01
          • 2014-09-29
          • 2012-08-16
          • 1970-01-01
          • 2013-06-27
          • 1970-01-01
          相关资源
          最近更新 更多