2013-02-12 2 views
1

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

Существует существующий метод «ICommonStructureService.DeleteBranches», который должен выполнять работу. Моя проблема заключается в том, что для метода требуется параметр «string [] nodeUris», который указывает ветвь для удаления с использованием URI «vstfs: // ...», и я просто не знаю, как получить это для моей ветви.

Что мне нужно что-то вроде:

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

'Destroy'? Программный? Зачем использовать управление версиями вообще, если вы собираетесь уничтожить все? –

+0

Обратите внимание, что есть DestroyFlags avaialble. «DestroyFlags.KeepHistory» означает, что не все уничтожено, но история сохранена. Вариант использования для этого, например, «временная» ветвь, которая может не понадобиться позже (в случае, если история не будет уничтожена). Программно, потому что у нас есть интегрированная среда, которая инкапсулирует многие операции TFS. – ulfgebhardt

0

Удаление ветви в управлении версиями подобно удалению любого другого элемента управления версией. Вам нужно будет отложить удаление с помощью Workspace.PendDelete на Item.

method you reference совершенно не связана с контролем версий, это часть ССТ common structure service, который управляет «areas and iterations», что TFS рабочие элементы могут быть назначены.

Короче говоря, нет никакого способа выполнить какие-либо операции контроля версий против службы общей структуры. Вы удаляете ветвь, создавая Workspace против VersionControlServer, ожидая удаления, а затем проверяя ваши ожидающие изменения.

+0

Спасибо за ваш ответ, но поскольку существует этот метод «ICommonStructureService.DeleteBranches», должна быть возможность его использовать. – ulfgebhardt

+0

Существует возможность использовать его, но не для ветвей управления версиями, для ветвей службы общей структуры. 'Http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.server.icommonstructureservice.deletebranches (v = VS.90) .aspx'. –

+0

Я не совсем понимаю, что вы имеете в виду с «ветвями служб общей структуры». Ваша ссылка, похоже, не работает для меня ... – ulfgebhardt

0

Я согласен с Эдвардом Томсоном об использовании команды 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(); 
      } 
     } 
    } 

Если есть отличный способ сделать то же самое, чем я с нетерпением жду этого. Это немного медленно, как это делает слишком много вещей,

  • Создает Temp Workspace
  • Возвращает все изменения в этой
  • выполняет Удалить для всего изменения установленных
  • проверяет его в
  • Очищает рабочее пространство