Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perforce上进行快速安全的同步?_Perforce_Sync - Fatal编程技术网

如何在perforce上进行快速安全的同步?

如何在perforce上进行快速安全的同步?,perforce,sync,Perforce,Sync,如果您执行了同步,那么即使应该执行,也常常会发生什么都不做的情况。如果您执行强制同步(sync-f),它肯定会盲目地同步服务器上的所有文件,如果您有一个大项目,这是不可接受的 问题是如何进行快速同步?问题的关键部分是“即使应该”。毫无疑问,在我(太)多年的Perforce经验中,那些习惯性地恢复强制同步的用户,因为正常的同步没有达到他们期望的效果,没有正确地使用Perforce 您必须让Perforce为您管理硬盘—服务器知道您拥有哪些文件的版本,因此正常的同步只会得到它所需要的。如果失败,那么

如果您执行了
同步
,那么即使应该执行,也常常会发生什么都不做的情况。如果您执行强制同步(
sync-f
),它肯定会盲目地同步服务器上的所有文件,如果您有一个大项目,这是不可接受的


问题是如何进行快速同步?

问题的关键部分是“即使应该”。毫无疑问,在我(太)多年的Perforce经验中,那些习惯性地恢复强制同步的用户,因为正常的同步没有达到他们期望的效果,没有正确地使用Perforce

您必须让Perforce为您管理硬盘—服务器知道您拥有哪些文件的版本,因此正常的同步只会得到它所需要的。如果失败,那么这几乎毫无例外地表明用户正在修改、删除、添加、重命名Performance之外的文件(例如在Explorer中)

有时,您可能会遇到导致此问题的系统故障(即PC故障),因此不一定是用户故障。但是这些是非常罕见的-因此我在上面的“习惯性”限定词

若你们真心认为你们并没有做任何不寻常的事情,那个么开始看看还有什么其他的过程可以调整这些文件。例如,您构建的系统是否做了一些奇怪的事情,并在构建时尝试修改文件?您是否有一个开放的网络共享,可能是其他人无意中戳到的?您是否有干扰的备份系统


希望这能有所帮助。

如果您造成不一致,perforce无法跟踪工作区中的情况,您应该使用“协调脱机工作…”功能(在P4V中)

这将运行文件夹差异,并告诉您解决不一致问题的选项


通常,请确保始终通过perforce(open for edit)显式签出文件。如果您习惯了其他系统,这会让人感到奇怪。

如其他答案所述,您需要为从仓库同步的目录树的每个“实例”创建一个单独的客户端(工作区)

如果要强制仅同步从仓库更改的文件:

p4 diff -se ... | p4 -x - sync -f
p4 diff -sd ... | p4 -x - sync -f
警告:这将覆盖任何本地更改的文件(在当前目录和子目录中)

如果您编辑了一些文件,但忘记先打开它们进行编辑,则可以执行以下操作:

p4 diff -se ... | p4 -x - edit
它将打开以编辑与仓库不同的任何文件

这是:

p4 diff -sd ... | p4 -x - delete

将打开以删除本地删除的任何文件。

我相信您要查找的命令是p4 clean

发件人:

“工作区中存在但仓库中缺少的文件将从工作区中删除。 站点中存在文件,但您的工作区中缺少这些文件。已从站点同步的文件版本将添加到您的工作区中。
在您的工作区中修改的、尚未签入的文件将恢复到从站点同步的最后一个版本。”

抱歉,我不打算为此使用visual client。对于同一个项目,我从6个不同的perforce服务器同步文件,因此只能接受批处理解决方案-我不想手动重复该过程。@sorin:您找到过可接受的解决方案吗?在尝试自动化构建时,我遇到了类似的情况。我不想每次都强制同步,因为这需要~2小时。对不起,我不再讲perforce了。我最后一次接触他们是在大约5年前。他们只有一个未来,一个类似于blackberry的未来。Perforce将您拥有的文件的哪个版本与您的每个客户端规范相关联。这些信息保存在服务器上的每个客户端规范中,称之为“拥有列表”。共享客户端不是典型的用户实践。Perforce允许它们启用特定的使用场景。但是,如果您在不同的机器上工作,那么这可以通过为每台机器指定一个客户机规范来处理。这正是它们的设计目的。假设您有一个构建场-是否要为场中的每台计算机创建一个工作区(clientspec)?是的,在大多数情况下,建议为每台计算机创建一个客户端规范。不过,你可以自动创建它们,所以不会像你想象的那么痛苦。格雷格,你能提供一些提示吗?我想找到一种方法来遵循您的建议,但使用现有的clientspec作为模板,如果有人正在更新原始的clientspec,它的脚本将更新生成的clientspec。大多数脚本可以通过命令行p4客户端轻松执行。您可以通过管道输入文本,或者在p4客户机的情况下,-t选项允许您提供模板。请尝试p4帮助客户端进行第一次查看。Perforce也有API(Python、.net等)-请参见Perforce网站。对于您的最后一个需求,您可以向Perforce添加一个触发器,该触发器将在客户端规范更改时调用脚本/命令。您可以使用此选项来重新生成其他项目,但请考虑是否需要立即执行此操作,或者是否需要使用明确的“发布”选项来更好地为您服务。P4 Clean将最终完成此工作,但在非常大的项目中,它的速度非常慢(相当于与有利于服务器的案例的自动处理相协调)。OP的最佳情况是通过perforce执行文件操作(删除、移动、编辑等)。但仍应偶尔进行检查,以查看是否有任何东西从裂缝中滑落。