0

由于我很难理解 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我应该得到要同步的文件列表(同步预览,我将在后台工作人员中同步每个文件),但它返回给我所有的 depot 文件(文件在 //root)

有人可以帮忙吗?问候

4

1 回答 1

0

当你这样做时:

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/...

这就是为什么您要在同步中获取所有 depot 文件。

因此,如果您想更改视图地图,您必须做的不仅仅是在本地设置它,您还必须在运行同步之前更新服务器上的工作区定义。

可以帮助您调试这些事情的一件事是充分熟悉 p4 命令行工具,以允许您从 CMD.EXE 提示符运行命令,例如:

p4 sync -n @123

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

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

于 2014-07-19T16:23:49.663 回答