我读了documentation,它说的是这样的: -
填充客户端工作区,但不更新have列表。任何文件 已经同步或打开的已被旁路并显示警告消息。 此选项通常用于进程中使用的工作空间(例如 在某些构建或发布环境中,没有必要 在首次同步后跟踪工作空间的状态。
但我不太了解这样做的优点(或缺点)。
答案 0 :(得分:4)
以下是一个有用的示例:您有一个构建服务器场(例如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,它将也获得增量同步,即它只会同步几个文件,甚至不会同步(如果自同步Foo以来没有文件被修改)。这是错的,因为B还没有Foo!逐步同步是没有意义的。
解决方案是构建服务器B调用p4 sync -f
:即忽略“have”表(即忽略Perforce服务器认为clientFoo
已经拥有的内容)并强制完全同步。这当然是可行的:所有10个构建框都可以调用p4 sync -f
来解决不需要的增量同步问题。但是每个p4 sync -f
仍然会更新Perforce服务器的“have”表,这是浪费,因为我们从不使用它(我们总是使用-f
忽略它)。因此,为了避免维持“have”表是徒劳的,我们可以从所有构建服务器调用p4 sync -p
,并且永远不会更新“have”表。
答案 1 :(得分:0)
我想它与svn export
类似,您想要获取所有文件,但您并不打算从此工作区提交任何内容。
例如对于持续集成工具,只想要文件构建并执行一些测试,然后将删除所有内容。我不确定,但它可能会阻止从此工作区提交(因为您没有"有列表")因此它可能是一个安全措施。