使用perforce sync -p选项有什么好处?

时间:2016-02-29 02:53:52

标签: synchronization perforce

我读了documentation,它说的是这样的: -

  

填充客户端工作区,但不更新have列表。任何文件   已经同步或打开的已被旁路并显示警告消息。   此选项通常用于进程中使用的工作空间(例如   在某些构建或发布环境中,没有必要   在首次同步后跟踪工作空间的状态。

但我不太了解这样做的优点(或缺点)。

2 个答案:

答案 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类似,您想要获取所有文件,但您并不打算从此工作区提交任何内容。

例如对于持续集成工具,只想要文件构建并执行一些测试,然后将删除所有内容。我不确定,但它可能会阻止从此工作区提交(因为您没有"有列表")因此它可能是一个安全措施。