如何加速Perforce自动解决冲突?

9

我想知道如何加快Perforce自动解决冲突的速度(在集成时将本地和远程代码合并,如果没有冲突存在)。

即使使用代理服务器并且已经预缓存了这些文件,当前运行该过程花费了数小时才处理完约5000个文件。

此外,P4V界面不提供有关任务进度的任何提示,您无法知道它是在一秒钟内完成还是要到明年。


“自动解决(无合并)”——这是可能最简单的算法,为什么它如此缓慢?我认为问题在于Perforce所有操作都在网络上进行,所以它会按顺序进行5000个请求或其他愚蠢的事情。 - Colonel Panic
此言不实。我的合并对话框清楚地显示任务已经完成了100%,而且已经持续了一个小时。 - vargonian
4个回答

2
“如果你的服务器性能适中,那么5000个文件并不算很多要解决的。”
“你的文件是否是二进制文件且大小相当可观?如果你的5000个文件是二进制文件,自动解决将在本地硬盘上对它们进行校验以与服务器上的校验和进行比较(代理只是将信息或文件传递给你),这可能会使你的速度变慢。”
“如果你事先知道你正在尝试进行单向解决(从你的硬盘中读取或从服务器中读取),你可以使用‘接受你的’或‘接受他们的’选项来自动解决并跳过校验操作。在命令行中,这将是带有“-ay”或“-at”选项的“p4 resolve”。”
“你还可以联系你的Perforce数据库管理员,并让他们记录服务器操作。也许在你进行集成和解决时,会执行一些持有文件锁的操作,导致你旋转等待直到锁被释放。参见“p4 monitor show -a”的参考。”
例如,在我们的办公室,周一早上,办公室里的每个人都会集成到他们的私有分支并解决问题。

每次对几千兆字节的数据进行校验和计算都不是很快。有没有办法让Perforce仅使用文件的修改时间?在99.999%的情况下,文件不会在不更改其日期/时间的情况下被更改。 - sorin
Perforce没有简单的方法来完成这个。如果您不想检测变更,只需使用文件修改时间确定是否自动解决它们,那么您需要编写脚本或程序以获取Perforce数据库中文件提交的时间概念与硬盘上文件的修改时间的对比。客户端工作区的修改时间值也可以更改已同步文件的修改时间,因此如果您选择这条路线,请小心。 - Epu

2

我也遇到了一个类似的问题,与位于地球另一端的代理一起工作。我进行了一些实验,发现问题似乎不会因文件大小或解决方法(接受他们等)而受影响,至少对于较小的文件而言。

我猜测每个文件都有一些往返成本,因为总的解决时间相当恒定,无论是将命令分解为单个文件的解决命令,每组文件批量处理,还是解决整个更改列表。在我的情况下,超过10k个文件的开销约为每个文件1秒钟。

我目前通过登录与远程服务器共存的虚拟机并从那里执行解决来解决此问题。然后您可以从VM提交,然后正常同步。由于我需要先在本地运行测试,然后才能提交文件,因此我在VM上搁置文件,然后在本地计算机上取消搁置。这也不是非常快,但似乎更好。

因此,这并不是解决问题的方法,但在我的情况下是可行的解决方法,可以节省数小时。


1

我猜你可以从命令行中进行解决,这可能会让你知道它仍在进行中,并且不会阻止你在P4V中进行其他工作。


0

如果您事先知道它肯定是单向解决,也许可以尝试强制接受"theirs"或"yours"版本。请参见命令行中的"p4 help resolve",特别是"-at"和"-ay"选项。

我不确定它是否会带来任何性能优势,但尝试一下(并进行一些基准测试)很容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接