2013-02-12 150 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(); 
      } 
     } 
    } 

如果有一個整潔的方式做同樣的比我期待着它。這是因爲它的東西太多了有點慢,

  • 創建臨時工作區
  • 獲取的所有更改到
  • 進行刪除,以整體變更集
  • 檢查它
  • 清理工作區