lio*_*319 2 perforce synchronization
我阅读了文档,它是这样说的:-
填充客户端工作区,但不更新拥有列表。任何已同步或打开的文件都会被警告消息绕过。此选项通常用于流程(例如某些构建或发布环境)中使用的工作区,其中首次同步后无需跟踪工作区的状态。
但我不太明白这样做的优点(或缺点)。
下面是一个有用的示例:您有一个构建场(例如 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,它还更新了 Perforce 服务器,该服务器现在认为项目 Foo 已同步到最新的clientFoo. 如果构建服务器 A 再次同步 Foo,它将获得增量同步。还好。然而,如果客户端 B 接下来同步 Foo,它也将获得增量同步,即它只会同步几个文件,甚至什么也不同步(如果自 A 同步 Foo 以来没有文件被修改)。这是错误的,因为 B 还没有任何 Foo 信息!增量同步是没有意义的。
解决方案是构建服务器 B 调用p4 sync -f:即忽略“有”表(即忽略 Perforce 服务器认为clientFoo已经拥有的表)并强制完全同步。这当然是可行的:所有 10 个构建盒都可以调用p4 sync -f来解决不需要的增量同步问题。但每个p4 sync -f仍然会更新 Perforce 服务器的“have”表,这是浪费的,因为我们从不使用它(我们总是通过使用忽略它-f)。因此,为了避免徒劳地维护“have”表,我们可以p4 sync -p从所有构建服务器调用并且永远不更新“have”表。