Cib*_*X15 3 perforce unity-game-engine
好的,我正在使用 Perforce P4V 来备份我的 Unity 项目工作。我的一位队友检查了对图元文件的一些更改,这破坏了一切。没问题吧?这就是使用 P4 的全部意义。我们可以恢复它。只是...恢复不起作用?
我看到的行为是文件 A 在更改列表 1 中更改,文件 B 在更改列表 2 中更改,文件 C 和 A 在更改列表 3 中更改
假设更改列表 3 包含我在历史记录中单击更改列表 2 的错误更改,然后单击“获取修订”,并选中“强制操作”框。更改列表 2 是最后一个已知的良好状态,我期望发生的情况是将所有文件恢复到提交更改列表 2 时的状态。
相反,文件 C 已恢复,但文件 A 未恢复。就像,由于文件 A 在更改列表 2 中没有更改,所以它没有费心去获取该版本。
所以我处于一种状态,所有统一图元文件都被损坏,所有预制件引用都被破坏。
当这不起作用时,我尝试使用获取修订版返回到最新状态。然后使用退出。这同样不起作用,图元文件仍然损坏。然后,我尝试选择最后一个已知的良好状态并将整个项目文件夹回滚到该状态。再次,没有工作。但话又说回来,那时我可能已经严重损害了我的项目,以至于什么都不起作用。
我发现似乎正确恢复文件并恢复损坏的链接的唯一方法是手动选择每个文件或文件夹并将其恢复到最后一次良好的提交,这对于每个文件/文件夹来说都是不同的,因为它们是在中添加和更改的不同的提交。
我不明白的是为什么强制修订没有自己做到这一点。或者撤消错误提交的“正确”方法是什么。
我什至尝试删除整个资产文件夹,然后使用 get revisionforce 使用最后一次已知的良好提交从服务器中提取全新的副本。这似乎一次完美地工作,但是当我尝试重复它以验证我的结果时,它又丢失了所有元文件链接。恢复良好状态的唯一可靠方法似乎是手动强制将每个文件和文件夹获取到单个最后一次已知的良好提交。
这次我已经让自己不得不手动修复我的错误,但我真的很感激帮助知道如何在未来以正确的方式做到这一点。
使用p4 undo
命令。
p4 undo @BADCHANGELIST
p4 submit
Run Code Online (Sandbox Code Playgroud)
这里的所有都是它的!
(P4V 中有一个类似的操作,称为“Back Out”——我在使用此操作时遇到了困难,并且更喜欢使用命令行,因为它更容易,但是 YMMV。)
请注意,p4 undo
和p4 revert
是完全不同的命令!许多人对此感到困惑,因为git
调用它的“撤消”命令git revert
,但 ap4 revert
与 a 不同git revert
(它更像是git reset --hard
)。您无法p4 revert
撤消已提交的内容;它仅用于将您的待处理工作从仓库恢复到最新提交的状态。
我会看看是否可以解释您尝试的方法出了什么问题:
假设更改列表 3 包含我在历史记录中单击更改列表 2 的错误更改,然后单击“获取修订”,并选中“强制操作”框。更改列表 2 是最后一个已知的良好状态,我期望发生的情况是将所有文件恢复到提交更改列表 2 时的状态。
相反,文件 C 已恢复,但文件 A 未恢复。就像,由于文件 A 在更改列表 2 中没有更改,所以它没有费心去获取该版本。
IIRC 当您单击更改列表并使用它在 P4V 中同步时,它默认执行操作p4 sync @CHANGE,CHANGE
而不是p4 sync @CHANGE
- 正如您所观察到的,如果您试图在整个过程中“回滚”到较早的状态,这是非常没有帮助的工作区。您可以通过单击同步对话框中某处的复选框来解决此问题。我相信,如果您单击“文件夹历史记录”视图中的更改列表,它会使用路径 ( p4 sync path/...@CHANGE
),这样效果会更好。
一旦您成功将工作区同步到较旧的状态,如果您想让该状态永久存在,您需要打开文件edit
(在 P4V 中“签出”),sync
以安排解决方案(在 P4V 中“获取最新”) ),resolve
(这也是 P4V 中的“解决”,请确保您接受your
工作区版本(P4V 可能会将此称为“接受目标”,我不确定),然后 。再次submit
,我建议仅使用,p4 undo
以便您可以跳过所有那些手动步骤。
归档时间: |
|
查看次数: |
6096 次 |
最近记录: |