Perforce .net API同步仓库文件

本文关键字:文件 同步 net API Perforce | 更新日期: 2023-09-27 18:13:31

由于我很难理解P4 API文档,我需要帮助。我在仓库中有一个文件夹,比如//root/a/...,我正在运行一个预览,以了解将在更改列表上同步的文件数量,比如123

Client.ViewMap = new ViewMap();
Client.ViewMap.Add("//root/a/...", "//" + myWrkSpace + "/a/...", MapType.Include);
Options sFlags = new Options( SyncFilesCmdFlags.Preview, 123 );
rFiles = rep.Connection.Client.SyncFiles(sFlags, null);

rFiles中,我应该得到要同步的文件列表(同步预览,我将同步后台工作中的每个文件),但它返回给我所有的仓库文件(文件在//root)

有人能帮忙吗?关于

Perforce .net API同步仓库文件

当你这样做的时候:

Client.ViewMap = new ViewMap();
Client.ViewMap.Add("//root/a/...", "//" + myWrkSpace + "/a/...", MapType.Include);

你只是在程序的Client对象中本地设置一些数据,而不是在服务器上。

服务器运行时:

rFiles = rep.Connection.Client.SyncFiles(sFlags, null);

它正在使用存储在服务器上的视图映射。

如果您运行(从CMD.EXE提示符,并使用您的工作区的真实名称):

p4 client -o myWrkSpace

您将看到服务器上工作区的实际的视图映射。

我打赌你会看到它是:

//root/... //myWrkSpace/...

这就是为什么你得到所有的仓库文件在你的同步。

所以如果你想改变你的视图映射,你必须做的不仅仅是在本地设置它,你必须更新服务器上的工作空间定义,在运行同步之前。

有一件事可以帮助您调试这类事情,那就是充分熟悉p4命令行工具,使您能够从CMD.EXE提示符中运行命令,例如:
p4 sync -n @123

这是(我认为)你试图从你的API程序运行的命令。

然后您可以从命令行看到该命令是如何工作的,然后您可以查看服务器的日志,查看API程序发出的实际命令,并将这些命令与您从命令行运行的命令进行比较。