以旧名称以编程方式查找已移动的文件

时间:2012-03-21 01:26:37

标签: tfs tfs2010

an answer to another question中,Edward Thomson建议使用QueryItems按旧文件名查找已移动的文件。

然而,我似乎无法弄清楚这一点。看起来它是Microsoft.teamfoundation.versioncontrol.server.dll的一部分,但我似乎无法在任何地方找到它。我想知道这是否是TFS服务器本身的DLL(我目前无权访问)。如果是这样,它对我所需要的东西没有帮助。

如何通过TFS 2010中的旧文件名以编程方式查找移动的文件名?

2 个答案:

答案 0 :(得分:3)

如果您正在与之交谈的服务器至少是TFS 2010,则可以使用Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer.GetChangesForChangeset()执行此操作。确定使用QueryHistory进行重命名的变更集后,调用GetChangesForChangeset并为“includeMergeSourceInfo”参数传递“true”。这将填充每个Change对象上的“MergeSources”属性。

在2010年切换到“slotmode”时,TFS版本控制中的重命名与封面下的“分支和删除”操作非常相似。因此,重命名实际上是作为“合并历史记录”的一部分进行跟踪的。

因此,如果您迭代更改并找到具有MergeSource的更改,该MergeSource既是重命名(请参阅IsRename属性)并且包含您的源项,那么您将找到重命名操作的目标项。

答案 1 :(得分:1)

我认为他实际上是指

的GetItem(s)或QueryHistory方法
Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer
Namespace:  Microsoft.TeamFoundation.VersionControl.Client
Assembly:  Microsoft.TeamFoundation.VersionControl.Client (in Microsoft.TeamFoundation.VersionControl.Client.dll)

有关这些项目的更多信息,请参阅this msdn page。您可以指定可包含删除标识符的VersionSpec。如果我没记错的话,如果你想对旧版本的TFS使用这个代码,你需要小心。在TFS2010中引入了slotmode,它更高效并且可以跨版本跟踪文件名更改。在此之前,重命名基本上归结为删除旧版本和添加新版本,没有关系存储。