我正在使用服务器版本更新本地修改的文件,以便我拥有所有最新的更改(其他开发人员在处理文件时所做的更改)。我已经尝试过p4同步。有谁知道处理这件事的正确方法?
由于
答案 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
。
比方说,您有本地修改的文件,由于您在本地修改了文件,因此上游的同一文件也有一些更新。
我要执行的理智步骤如下
p4 sync -n
::与-n
一起试运行,它实际上不会产生任何效果或执行任何操作,但是如果确实执行,则会返回输出。对于我们目前所处的特定情况,您可能希望查找前面有...
的行和上面有is opened and not being changed
的行。根据我们的情况,这意味着上游文件具有您打开的文件的更新,并且可能已对其进行了一些更改。需要解决。p4 sync
来实际执行。p4 resolve -n
::再次使用-n
,表示空运行。这是为了检查由于sync
而导致您是否需要解决任何未解决的冲突。No file(s) to resolve.
)p4 resolve -am
::这将自动执行冲突解决。它会尝试合并,但是如果目标文件存在任何合并冲突,则不会执行任何操作。它的输出将列出每个文件的结果。对于遗漏的文件,输出中将存在非零冲突。p4 resolve -af
::手动执行合并。其输出将列出文件(当然还有它们的路径)。ORIGINAL
或THEIRS
或YOURS
,然后删除不需要的部分,或根据需要将内容合并在一起。完成每个文件后,只需保存并退出即可。对所有文件执行此操作。PS 。有关6的更多信息。实际上,您可以指定希望它在何种情况下发生的合并解决方案策略
p4 resolve -at
::接受上游的更改(接受THEIRS
)p4 resolve -ay
::从上游忽略更改,仅接受本地的内容(接受YOURS
)还请记住,THEIRS
不必始终是来自仓库的上游更改,但是如果这意味着您只是在本地不放入工作区的更改列表。