Perforce p4 sync-p在Performce的某些条件下不工作

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/

我有一个Perforce仓库并连接到一个副本服务器。因此,我使用带有
-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欺骗覆盖您正在处理的文件。