Perforce p4 sync-p在Performce的某些条件下不工作
我有一个Perforce仓库并连接到一个副本服务器。因此,我使用带有Perforce p4 sync-p在Performce的某些条件下不工作,perforce,Perforce,我有一个Perforce仓库并连接到一个副本服务器。因此,我使用带有-p标志的p4 sync,因为复制副本没有客户端工作区的“have list”。例如: $ p4 sync -p //depot/path/to/branch/...@12345,12345 因为我想将该更改列表中的所有更改应用到我当前的工作区,所以我在末尾添加了..@CHANGELISTID,CHANGELISTID表达式 这适用于所有同步操作和所有分支,但如果更改列表中有一个文件被删除,我会收到以下错误: //depot/
-p
标志的p4 sync
,因为复制副本没有客户端工作区的“have list”。例如:
$ p4 sync -p //depot/path/to/branch/...@12345,12345
因为我想将该更改列表中的所有更改应用到我当前的工作区,所以我在末尾添加了..@CHANGELISTID,CHANGELISTID
表达式
这适用于所有同步操作和所有分支,但如果更改列表中有一个文件被删除,我会收到以下错误:
//depot/path/to/branch/foo - can't sync -p a file that's synced
但我想删除它。为什么这不起作用
从“关于p4同步”
:
-p
填充客户端工作区,但不更新have列表。任何文件
已同步或打开的将被警告消息绕过
此选项通常用于流程中使用的工作区(例如
作为特定的构建或发布环境),不需要
跟踪工作区首次同步后的状态
我知道该文件已同步,但在给定的更改列表中,其状态实际上已切换为“已删除”。以下是p4 descripe
的输出,以供参考:
$ p4 describe -s 12345
Change 12345 by daniel@my_workspace on 2020/02/15 23:09:38
delete test
Affected files ...
... //depot/path/to/branch/foo#2 delete
如果您使用
p4 sync-p
,您需要始终如一地使用它-sync-p
不会跟踪状态,因此如果您尝试sync-p
一个具有现有sync状态的工作区,这可能意味着您的位置不好,sync-p
将拒绝执行任何操作(发出您看到的错误消息)
如果错误消息是准确的,则表明您没有持续使用p4 sync-p
(可能您将此工作区与主服务器一起使用?)。以下是如何判断:
p4 have
如果您只使用过p4 sync-p
,则不会返回任何结果。如果它返回一个已同步文件的列表,则表示至少有一些工作区状态正在被跟踪,并且当sync-p
看到它时,它会担心它使您的本地文件与该状态不一致
要放弃所有工作区状态,可以执行以下操作:
p4 revert -k //...
p4 flush #none
如果
p4 have
表示您没有同步文件,但p4 sync-p
表示您有,则您可能遇到某种错误,应联系support@perforce.com.这很有道理!我想你刚刚解决了这个问题。我假设p4-sync
和p4-sync-p
也会这样做!我现在可以确认,p4add
命令导致列表更新。你知道我是否可以添加一个文件而不让服务器告诉我已经有了它吗?像p4 add-p
或p4 submit-p
?如果不更新然后从工作区状态读取,则无法写入文件(例外情况:p4 populate
纯粹是仓库到仓库,因此不涉及工作区)p4 sync-p
仅支持只读工作区操作。此处的最佳做法是拥有一个仅用于副本服务器的工作区根,并且仅对该工作区执行p4 sync-p
。在主服务器上使用单独的工作区,并使用该工作区提交文件。您不希望复制副本的未跟踪sync-p
s欺骗覆盖您正在处理的文件。