尝试使用p4api.net方法中的-a选项还原更改列表中的文件。它曾经为我工作,但现在我得到以下消息的例外。
另外p4编辑和p4恢复使用-c选项工作正常,但p4恢复使用-a选项会抛出异常。我不知道为什么在p4工作空间位置选择测试项目位置以下。
例外:
路径'd:\ cftt \ Dev \ source \ BRF \ BRF.Business.Test \ bin \ Debug \ 19402547'不在客户端根目录'D:\ p4'下。
// to open files for edit in a given changelist at certain loc with particular file format
public IList<FileSpec> EditChangeList(string clNumber, string fileFormat, string destinationPath)
{
try
{
var rep = Connect();
var opts = new Options(ChangeCmdFlags.None, ChangeListType.None);
opts["-c"] = clNumber;
var fs = new FileSpec(new DepotPath(destinationPath + "/..." + fileFormat));
IList<FileSpec> editedFileSpec = rep.Connection.Client.EditFiles(new List<FileSpec> {fs}, opts);
return editedFileSpec;
}
catch (Exception exc)
{
Logger.LogError(exc.Message);
throw;
}
}
// to revert files in a changelist that are unchanged using -a option
public IList<FileSpec> RevertChangeList(string clNumber, string destinationPath)
{
try
{
var rep = Connect();
var opts = new Options(ChangeCmdFlags.None, ChangeListType.None);
opts["-a"] = clNumber;
var fs = new FileSpec(new DepotPath(destinationPath + "/..."));
IList<FileSpec> revertedFiles = rep.Connection.Client.RevertFiles(new List<FileSpec> {fs}, opts);
return revertedFiles;
}
catch (Exception exc)
{
Logger.LogError(exc.Message);
throw;
}
}
答案 0 :(得分:0)
revert命令采用几种不同类型的标志和参数:
在您的命令中,您运行了:
p4 revert -a 19402547 d:\p4\sw\dev\gpu_drv\chips_a\diag\mods\sim\resources/...
由于-a标志没有取值,因此revert命令将其视为:
由于文件参数19402547前面没有目录名,因此revert命令将其解释为相对于当前目录的相对文件名,并查找名为&#39; d:\ cftt的文件\开发\源\ BRF \ BRF.Business.Test \ BIN \调试\ 19402547&#39; ,确实不在您客户的根目录下,因此不是Perforce能够恢复的文件。
这里的正确方法是完全省略更改列表编号,或者将其指定为-c标志的值,具体取决于您是否要还原sim \ resources目录中的所有打开文件,或者是否仅希望还原该目录中那些在changelist 19402547中打开的打开文件。
即两者:
p4 revert -a d:\p4\sw\dev\gpu_drv\chips_a\diag\mods\sim\resources/...
和
p4 revert -a -c 19402547 d:\p4\sw\dev\gpu_drv\chips_a\diag\mods\sim\resources/...
是合理的命令,正确的选择取决于你想要的行为。