2015-02-17 2 views
0

Я пытаюсь программно получить список всех ветвей в TFS для Visual Studio 2013. После некоторых исследований я нашел этот блог, который подробно описывает, как получить ветки:Получите все TFS-ветви программно в C '#

Displaying all branch hierarchies in TFS 2010

Я изменил код, чтобы вместо этого хранить все в списке.

private void Setup() 
    { 
     string serverName = "serverName"; //in the code this is set to the actual server name 
     TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(serverName)); 
     VersionControlServer vcs = tfs.GetService<VersionControlServer>(); 

     var bos = vcs.QueryRootBranchObjects(RecursionType.OneLevel); 
     Array.ForEach(bos, (bo) => DisplayAllBranches(bo, vcs)); 
    } 

private void DisplayAllBranches(BranchObject bo, VersionControlServer vcs) 
    { 
     _listOfBranches.Add(bo.Properties.RootItem.Item); 
     var childBos = vcs.QueryBranchObjects(bo.Properties.RootItem, RecursionType.OneLevel); 
     foreach (var child in childBos) 
     { 
      if (child.Properties.RootItem.Item == bo.Properties.RootItem.Item) 
       continue; 

      DisplayAllBranches(child, vcs); 
     } 
    } 

Проблема, с которой я сталкиваюсь, заключается в том, что BranchObjects [] bos всегда пуст. Есть ли что-то, что мне не хватает, или есть лучший способ получить список всех филиалов?

ответ

1

Проведя еще несколько исследований, я выяснил проблему. Наша TFS структурирована аналогично следующему:

$/Root 
$/Root/Folder 
$/Root/Folder/Branch 

Первый уровень вниз не возвращает никаких Ветви, потому что их нет. Поэтому вместо этого я использовал более простой подход, который получает все ветви.

var branchObjects = vcs.QueryRootBranchObjects(RecursionType.Full); 

     foreach (var branch in branchObjects) 
     {   
      var branchName = branch.Properties.RootItem.Item; 
      var parentFolder = branchName.Substring(0, branchName.LastIndexOf('/')); 

      if (!_listOfBranches.Contains(parentFolder)) 
      { 
       _listOfBranches.Add(parentFolder); 
      } 
      _listOfBranches.Add(branchName); 
     } 
     _listOfBranches.Sort(); 

Это не самый чистый подход на данный момент. Но он может извлекать все ветви для указанного проекта, а также родительские папки (за исключением Root, пока).

0

Этот код должен работать нормально (работает для меня). Я подозреваю, что вам не хватает имени вашей коллекции из переменной имени сервера?

Если у вас есть достаточно стандартная установка, ваш формат переменного имя_сервера должен быть: http://ServerName:Port/tfs/CollectionName так, например: http://tfsServer01:8080/tfs/MyCollection

+0

Спасибо за отзыв. Проблема была не в имени сервера. Проблема заключалась в том, что первый уровень - это папки, содержащие ветви. Поняв это, я смог решить проблему. Я опубликовал решение. – TheMoonbeam

0

Можете ли вы подтвердить, что объект VCS является действительным? Можете ли вы выполнить какую-либо другую операцию, например. GetItems? У вас есть филиалы в вашем репозитории? Обратите внимание, что в tfs 2010 были добавлены «ветка ocjects», и они не равны только операции ветвления. В проводнике управления версиями у них есть серый значок, они могут быть созданы с помощью контекстного меню

Смежные вопросы