无法在已重命名的文件上使用VersionControlServer.GetItem()或GetItems()?

时间:2013-08-16 16:28:19

标签: tfs tfs2010

我正在尝试使用VersionControlServer.GetItem()或GetItems()方法从已重新生成的TFS版本控制中检索项目。我发现当项目被删除时,以下方法可以正常工作。但是,如果项目的最后一次更改是“删除,源重命名”,则这些API调用不会检索该项目。

此方法适用于已删除的项目。但不是重命名的项目。 对于删除的项目,我会得到我期望的内容......具有删除ID的项目。对于重命名的项目,我得到一个例外。

Microsoft.TeamFoundation.VersionControl.Client.VersionControlException:在版本T的源代码管理中找不到Item(serveritem)。

VersionControlService.GetItem(ServerItem, VersionSpec.Latest, DeletedState.Any)

我试图通过使用GetItems方法来解决这个问题。事实上,我没有得到异常......但GetItems返回一个空的项目集。

VersionControlService.GetItems(ServerItem, VersionSpec.Latest, RecursionType.None, DeletedState.Any, ItemType.Any);

这似乎是API中的错误或其他内容。就好像API不会将重命名的文件视为曾经存在过一样。我的实验使用VersionControlService.ServerItemExists()

进一步支持了这一点

对于DELETED项目,这将返回TRUE。 对于RENAMED项目,这将返回FALSE

VersionControlService.ServerItemExists(ServerItem, VersionSpec.Latest, DeletedState.Any, ItemType.Any);

那么,如果您只知道ServerItem路径,有没有办法获得已重命名的项目?我正在使用TFS 2010,BTW。

1 个答案:

答案 0 :(得分:0)

您可以使用VersionControl.QueryHistory(new ItemSpec(path,RecursionType.None))。Count()> 0检查集合中任何时间点是否存在路径。 它不关心重命名,删除等......