使用TFS API获取重命名文件的旧项目名称

时间:2015-03-17 15:44:56

标签: c#-4.0 tfs2010

我现在的tfs将在未来几个月内退役。我正在使用tfs api在现有服务器上的新服务器上创建并行tfs。我有已重命名的文件夹和解决方案。我正在迭代项目并根据他们的changetype(添加,编辑,删除,sourcerename等),我在目的地tfs检查它们。

我无法获取文件的旧文件名,以便在正在迭代的项目为Delete | SourceRename或Rename时使用PendRename。

我尝试了上述解决方案:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/f9c7e7b4-b05f-4d3e-b8ea-cfbd316ef737/how-to-get-previous-path-of-renamedmoved-of-file-using-tfs-api?forum=tfsgeneral

但是,我的变更集有很多变化,因此识别特定文件似乎很难。

我们是否有一些内容可以删除除变更集之外的两个项目(已删除和重命名的),因为需要有一个唯一的标识符来关联这两个项目,以便它们可以在TFS历史记录中一起显示?

2 个答案:

答案 0 :(得分:1)

我在某个地方读了这个并为了我的目的修改它,以便我可以获得给定服务器项的父分支:

ItemSpec itemSpec = new ItemSpec(serverItem,RecursionType.None);

        BranchHistoryTreeItem[][] results = sourceTFSHelper.VCS.GetBranchHistory(
            new ItemSpec[] { itemSpec }, VersionSpec.Latest);

        BranchHistoryTreeItem[] thisBranchResults = results[0];

        foreach (BranchHistoryTreeItem treeItem in thisBranchResults)
        {
            BranchRelative requestedItem = FindRequestedItem(treeItem);

            if (requestedItem != null)
            {
                return (requestedItem.BranchFromItem == null) ? null : requestedItem.BranchFromItem.ServerItem;
            }
        }

答案 1 :(得分:0)

在这里肯定可以改善TFS API的支持。对于该解决方案,您将必须查找存储在MergeSources容器中的关联的Delete更改实例。

下面,我粘贴了一些示例代码,希望可以从中启发您。

var changeInstances = VersionControlSvr.GetChangesForChangeset( 
                                                            %YourChangesetId%,                                                                                
                                                            false,                                                                                
                                                            Int32.MaxValue,                                                                               
                                                            null,                                                                                
                                                            null, 
                                                            true);
foreach (Change changeInstance in changeInstances)
{   
    Console.WriteLine(changeInstance);
    //if (changeInstance.MergeSources != null && changeInstance.MergeSources.Count > 0)
    //{
    //    var source = changeInstance.MergeSources.FirstOrDefault();

    //    Console.WriteLine($"{changeInstance.Item.ServerItem}");
    //    Console.WriteLine("was renamed from:");
    //    Console.WriteLine($"{source.ServerItem}");
    //    Console.WriteLine("::::::::::::::::::::::::::::::::::::::::::::::::::::::");
    //}
}