以编程方式删除TFS分支

时间:2013-02-12 12:55:20

标签: tfs tfs2010 tfs-sdk

我想以编程方式删除TFS中自动创建的分支。

现有的方法“ICommonStructureService.DeleteBranches”应该完成这项工作。 我的问题是该方法需要一个参数“string [] nodeUris”,它使用“vstfs:// ...”URI指定要删除的分支,我只是不知道如何为我的分支获取该分支。

我需要的是:

var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri <myCollectionUrl>));
var cssService = projectCollection.GetService<ICommonStructureService3>();
var project = cssService.GetProjectFromName(<myProjectName>);

但我如何从那里获得Branch Uri?

3 个答案:

答案 0 :(得分:1)

同时我找到了解决方案。删除我正在使用的分支

versionControl.Destroy(new ItemSpec(myBranchPath, RecursionType.Full), VersionSpec.Latest,  null, DestroyFlags.KeepHistory);

这正是我所需要的。 versionControl的类型为VersionControlServer,必须使用Team Collection

进行初始化

答案 1 :(得分:0)

在版本控制中删除分支就像删除任何其他版本控制项一样。您需要在Item上使用Workspace.PendDelete删除删除。

method you reference与版本控制完全无关,它是TFS common structure service的一部分,它控制着可以分配TFS工作项的“areas and iterations”。

简而言之,没有办法对公共结构服务执行任何类型的版本控制操作。您可以通过针对Workspace创建VersionControlServer,等待删除,然后检入待处理的更改来删除分支。

答案 2 :(得分:0)

我同意Edward Thomson关于使用Destroy命令。所以我跟着他的建议并提出了跟进,

public void DeleteBranch(string path)
{
    var vcs = GetVersionControlServer();
    var itemSpec = new ItemSpec(path, RecursionType.Full);
    var itemSpecs = new[] {itemSpec};
    var workSpace = GetOrCreateWorkSpace(vcs);
    try
    {
        workSpace.Map(path, @"c:\Temp\tfs");
        var request = new GetRequest(itemSpec, VersionSpec.Latest);
        workSpace.Get(request, GetOptions.GetAll | GetOptions.Overwrite);
        workSpace.PendDelete(path, RecursionType.Full);
        var pendingchanges = workSpace.GetPendingChanges(itemSpecs);
        workSpace.CheckIn(pendingchanges, "Deleting The Branch");
    }
    finally
    {
        if (workSpace != null)
        {
            workSpace.Delete();
        }
    }
}

如果有一种巧妙的方式来做同样的事情,那么我期待着它。这有点慢,因为它做了太多事情,

  • 创建临时工作空间
  • 获取对该
  • 的所有更改
  • 对整个更改集执行删除
  • 检查
  • 清理工作区