1

我想以编程方式删除 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?

4

3 回答 3

1

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

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

这正是我需要的。versionControl 是 VersionControlServer 类型,必须使用 Team Collection 进行初始化

于 2013-02-15T14:49:10.483 回答
0

删除版本控制中的分支就像删除任何其他版本控制项。您将需要Workspace.PendDeleteItem.

您引用的方法与版本控制完全无关,它是 TFS通用结构服务的一部分,它控制TFS 工作项可以分配到的“区域和迭代”。

简而言之,没有办法对通用结构服务执行任何类型的版本控制操作。您可以通过创建 a 来删除分支WorkspaceVersionControlServer挂起删除,然后签入待处理的更改。

于 2013-02-12T14:34:53.287 回答
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();
        }
    }
}

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

  • 创建临时工作区
  • 获取所有更改
  • 对整个变更集执行删除
  • 检查它
  • 清理工作区
于 2013-04-29T15:01:02.850 回答