我必须定期通过 VPN 对新硬件/虚拟机进行干净的 Perforce 同步。这可能需要几个小时,因为项目非常大。有没有一种方法可以简单地从现有客户端复制最新的树并告诉 Perforce 使用这棵树?
3 回答
Perforce 代理是正确的方法,但如果你真的想这样做,有一种方法可以通过sync
命令执行你所要求的操作,使用-k
开关:
-k 标志绕过客户端文件更新。它可用于使服务器相信客户端工作区已经拥有该文件。通常,当客户端上的文件有误时,此标志用于纠正 Perforce 服务器,如果您对客户端的内容有误,使用此选项可能会使服务器感到困惑。
p4 sync -k //depot/someProject/...
您也可以使用flush
,它是 的同义词sync -k
:
p4 刷新 //depot/someProject/...
小心点。记住最后一句话,“......如果您对客户端的内容有误,使用此选项可能会使服务器感到困惑。”
Perforce 代理几乎肯定是要走的路,假设您可以为此目的专用一台本地机器。
代理的一个有用提示是让它在一夜之间刷新其内容,只需创建一个虚拟客户端(可能在代理机器上),然后启动一个夜间任务来进行同步 - 正常同步就可以了,不需要做一个干净的人。这将确保人们签入的任何重大更改都不会在您第一次需要进行本地同步时造成巨大的延迟。
请注意,您需要在代理和服务器之间建立实时 VPN 连接 - 代理仍然必须与服务器通信以确定它是否缓存了正确的版本。所以代理需要一个合理的低延迟链接到服务器,但至少你不必等待实际的文件传输。
您可能想尝试的另一种选择是在客户端规范(工作区)中使用 compress 选项。这告诉服务器在发送之前压缩每个文件,您的 p4 客户端将自动解压缩。这里的权衡是服务器和客户端的 CPU 时间。但是,鉴于您要同步多个本地客户端,我认为代理最终将是更好的解决方案。
不,但您不需要:为什么需要执行干净的 perforce 同步?正常同步有什么问题?如果您需要清理树,那么为什么不处理树的副本呢?
一种替代方法可能是在 VPN 连接的一端运行 p4proxy,然后不必通过 VPN 传输未更改的文件。
如果您只需要导出 - 也就是说您不需要保持最新或提交更改,那么您可以简单地复制现有的结帐,并且永远不要对该树使用 perforce。但无论如何我都不知道如何说服 perforce 服务器你在没有 p4 实际检出文件的情况下进行检出。