有效地同步大型Perforce存储库?

时间:2012-02-07 15:25:16

标签: perforce

我很难从perforce服务器获取最新版本。仓库非常大,我不想做一个完整的结账,因为它会传说很长一段时间。相反,我将未版本化的源和依赖项放在工作区中并执行“p4 sync -k”。这成功地对我的文件进行了版本,但它没有从服务器中带来新文件。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

如果我了解你的情况:

  • 你反对一个非常大的项目。
  • 您拥有不完全最新的数据的本地快照。
  • 您希望仅获取快照与服务器上最新版本之间的差异。

您应遵循的步骤是:

  • 运行p4 sync -k以使Perforce认为您拥有所有文件的最新副本。
  • 运行p4 diff -se ... | p4 -x - sync -f强制同步任何过时的文件
  • 运行p4 diff -sd ... | p4 -x - sync -f强制同步所有丢失的文件

此时,您可能拥有从服务器删除的本地文件。如果您关心这些,您可以编写一个简单的脚本来检测它们并将它们从文件系统中删除。

好消息是Perforce的下一个版本(2012.1)有一个status命令,可以更容易地发现所有差异。

要从另一个角度处理此问题,您是否需要工作区中的整个项目?您是否可以缩小工作区视图以仅使用数据的子集?

答案 1 :(得分:2)

这是一个经典的Perforce问题。

要实现这一目标,您需要同时管理一些命令。

p4 diff -sd //Depot/Path/... | p4 -x – sync -f

  1. p4 diff -sd命令将查找工作区中不存在的所有文件。
  2. p4 -x – sync -f会强制同步这些文件。
  3. 正如p4-randall在他的answer中,你可能还想运行p4 diff -se ... | p4 -x - sync -f来同步任何过时的文件。

    HTH,