2

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

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

Microsoft.TeamFoundation.VersionControl.Client.VersionControlException:在版本 T 的源代码管理中找不到项目 (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() 的实验进一步支持了这一点

对于已删除的项目,这将返回 TRUE。对于重命名的项目,这将返回 FALSE

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

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

4

1 回答 1

0

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

于 2018-05-12T06:38:51.653 回答