如何在perforce中将本地修改的文件与服务器修订同步

时间:2014-12-11 06:12:22

标签: perforce

我正在使用服务器版本更新本地修改的文件,以便我拥有所有最新的更改(其他开发人员在处理文件时所做的更改)。我已经尝试过p4同步。有谁知道处理这件事的正确方法?

由于

2 个答案:

答案 0 :(得分:5)

如果文件已打开进行编辑,并且您已经运行了' p4 sync',那么您应该看到如下消息:

$ p4 sync
//depot/main/b#2 - is opened and not being changed
... //depot/main/b - must resolve #2 before submitting

这意味着Perforce已准备好将您的更改与新版本中的更改合并。

Perforce称这个过程为"解决"更改,并告诉您必须在提交文件之前解决它们。

如果您准备将更改与新版本中的新更改合并,请运行:

$ p4 resolve

许多人发现合并这些更改的过程有点复杂,并且更喜欢使用GUI工具。尝试从Perforce网站下载P4V工具,它将帮助您使用可视化合并工具合并更改。

如果您决定想要保留本地更改,并希望丢弃它们,并使用最新版本的文件,则可以通过运行以下命令来放弃更改:

$ p4 revert

但要小心!这将丢失您对文件所做的所有未提交的更改! ' sync -f'同样如此。命令和' p4 clean'命令;这些命令告诉Perforce您不希望在本地制作未经提交的更改,Perforce应该使用服务器上的干净副本替换该文件。

答案 1 :(得分:0)

我将在Bryan的答案上添加更多详细信息,尤其是有关所有同步序列以及修复合并冲突的信息;假定它基于CLI p4

比方说,您有本地修改的文件,由于您在本地修改了文件,因此上游的同一文件也有一些更新。

我要执行的理智步骤如下

  1. p4 sync -n ::与-n一起试运行,它实际上不会产生任何效果或执行任何操作,但是如果确实执行,则会返回输出。对于我们目前所处的特定情况,您可能希望查找前面有...的行和上面有is opened and not being changed的行。根据我们的情况,这意味着上游文件具有您打开的文件的更新,并且可能已对其进行了一些更改。需要解决。
  2. 这时,您可以执行p4 sync来实际执行。
  3. p4 resolve -n ::再次使用-n,表示空运行。这是为了检查由于sync而导致您是否需要解决任何未解决的冲突。
  4. (如果来自3.的输出为不是 No file(s) to resolve.p4 resolve -am ::这将自动执行冲突解决。它会尝试合并,但是如果目标文件存在任何合并冲突,则不会执行任何操作。它的输出将列出每个文件的结果。对于遗漏的文件,输出中将存在非零冲突。
  5. p4 resolve -af ::手动执行合并。其输出将列出文件(当然还有它们的路径)。
  6. 从5开始,编辑每个文件,如输出所示。搜索ORIGINALTHEIRSYOURS,然后删除不需要的部分,或根据需要将内容合并在一起。完成每个文件后,只需保存并退出即可。对所有文件执行此操作。

PS 。有关6的更多信息。实际上,您可以指定希望它在何种情况下发生的合并解决方案策略

  • p4 resolve -at ::接受上游的更改(接受THEIRS
  • p4 resolve -ay ::从上游忽略更改,仅接受本地的内容(接受YOURS

还请记住,THEIRS不必始终是来自仓库的上游更改,但是如果这意味着您只是在本地不放入工作区的更改列表。