Synchronization 使用perforce sync-p选项的优点是什么?

Synchronization 使用perforce sync-p选项的优点是什么?,synchronization,perforce,Synchronization,Perforce,我读了这本书,上面写着:- 填充客户端工作区,但不更新have列表。任何文件 已同步或打开的将被警告消息绕过。 此选项通常用于流程中使用的工作区(例如 作为特定的构建或发布环境),不需要 跟踪工作区首次同步后的状态 但是我不太明白这样做的优点(或缺点)。我想这类似于svn导出,您希望获取所有文件,但不打算从此工作区提交任何内容 例如,对于一个持续集成工具,它只希望文件构建和执行一些测试,然后将删除所有内容。我不确定,但它可能会阻止从此工作区提交(因为您没有“have list”),因此这可能是一

我读了这本书,上面写着:-

填充客户端工作区,但不更新have列表。任何文件 已同步或打开的将被警告消息绕过。 此选项通常用于流程中使用的工作区(例如 作为特定的构建或发布环境),不需要 跟踪工作区首次同步后的状态


但是我不太明白这样做的优点(或缺点)。

我想这类似于
svn导出
,您希望获取所有文件,但不打算从此工作区提交任何内容


例如,对于一个持续集成工具,它只希望文件构建和执行一些测试,然后将删除所有内容。我不确定,但它可能会阻止从此工作区提交(因为您没有“have list”),因此这可能是一种保护措施。

下面是一个有用的示例:您有一个构建场(例如10个构建服务器);这10台服务器都是克隆服务器:每个服务器都安装了相同的软件,每个服务器都可以构建您的项目,每个服务器都可以在相同的本地路径上构建您的项目(例如
C:\buildServer\projectFoo\
)。为了节省维护,您创建了一个P4客户端(我们称之为
clientFoo
),而不是10个客户端(每个构建服务器一个)。您可以在所有10个构建服务器上使用它,因为
clientFoo
未指定其
Host
(在客户端设置中)。显然,
clientFoo
将您的仓库路径映射到
C:\buildServer\projectFoo\
,这在所有10个构建框上都很有效

现在想象一下,构建服务器使用的是
p4 sync
,而不是
p4 sync-p
。首先,构建服务器A将调用
p4 sync
,并在本地文件系统上获取Foo项目。好。但是,由于它没有使用
-p
,它还更新了performe服务器,该服务器现在认为projectfoo已同步到最新的
clientFoo
。如果构建服务器A再次同步Foo,它将获得增量同步。还不错。但是,如果客户端B下一步同步Foo,它也将获得增量同步,即它将只同步两个文件,甚至什么也不同步(如果自同步Foo后没有修改任何文件)。那是错误的,因为B到现在还没有Foo!增量同步是没有意义的


解决方案是构建服务器B调用
p4 sync-f
:即忽略“have”表(即忽略Performce服务器认为
clientFoo
已经拥有的内容)并强制进行完全同步。这当然是可行的:所有10个构建框都可以调用
p4 sync-f
来解决不需要的增量同步问题。但是每个
p4 sync-f
仍然会更新performe服务器的“have”表,这是浪费,因为我们从不使用它(我们总是使用
-f
忽略它)。因此,为了避免徒劳地维护“have”表,我们可以从所有构建服务器调用
p4 sync-p
,并且从不更新“have”表。

它减少了服务器上的负载,但代价是大大增加了复杂的客户端编程。如果你不确定你需要它,你就不需要它。太好了!谢谢你的解释。