2013-02-12 153 views
1

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

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

我需要的是这样的:

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

但我怎么能得到科乌里从那里?

回答

1

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

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

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

+0

'摧毁'?编程?如果你要摧毁一切,为什么要使用版本控制? – 2013-02-15 15:26:24

+0

请注意,有可用的DestroyFlags。 “DestroyFlags.KeepHistory”意味着并非所有东西都被破坏,但是历史被保留下来。 这个用例就是以后可能不需要的“临时”分支(如果历史未被销毁)。 以编程方式,因为我们有一个封装了TFS许多操作的集成环境。 – ulfgebhardt 2013-02-18 13:02:32

0

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

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

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

+0

感谢您的回答,但因为有这种方法“ICommonStructureService.DeleteBranches”,应该有一个选项来使用它。 – ulfgebhardt 2013-02-13 09:58:58

+0

有一个使用它的选项,但不适用于版本控制分支,用于常见结构服务分支。 'http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.server.icommonstructureservice.deletebranches(V = VS.90).aspx'。 – 2013-02-13 14:53:37

+0

我不完全理解你的意思是“共同结构服务分支”。你的链接似乎不适合我... – ulfgebhardt 2013-02-14 10:18:16

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(); 
      } 
     } 
    } 

如果有一个整洁的方式做同样的比我期待着它。这是因为它的东西太多了有点慢,

  • 创建临时工作区
  • 获取的所有更改到
  • 进行删除,以整体变更集
  • 检查它
  • 清理工作区