2013-05-28 16 views
5

Mit TFS, habe ich Stamm $/project/trunk und einen Zweig $/project/dev/feature/new_one.Finden Sie den TFS-Pfad der verschmolzenen Zweig

Ich habe meine Zweig mit dem Stamm zusammengeführt wie folgt:

C33($/project/trunk) 
| \ 
| \ 
| C32($/project/dev/feature/new_one) 
|  | 
|  | 
|  | 
... 

ich die TFS-API verwenden, und die Zusammenführung changeset C33 finden. Mit dem Verfahren QueryMerges(), ich bin in der Lage, die Eltern changeset C32 mit allen Änderungen an den Dateien zu finden, aber nicht die Informationen, die ich brauche :(

Gibt es eine Möglichkeit, den TFS-API, das Repository zu finden Pfad der Branche $/project/dev/feature/new_one?

Mit dem changeset C32 verschmolzen, bin ich nur in der Lage Pfade von modifizierten Dateien zu erhalten, wie $/project/dev/feature/new_one/path/to/file.txt aber ich bin nicht in der Lage des Weg der Branche aus dem vollständigen Pfad der Datei zu extrahieren :(

PS: Eine Lösung funktioniert seit TFS2008 wird die beste sein, aber wenn es nur seit 2010 funktioniert, sollte es gut sein ...

PS2: Um dieses Problem zu lösen helfen Changesets in git-tfs zu verwalten fusionieren, die ich entwickeln ...

Antwort

5

Leider gibt es keine API-Methode einen Zweig für einen bestimmten Artikel Weg zu bekommen, was Sie denken ist ein ziemlich häufiger Anwendungsfall.

Ab TFS 2010 können Sie VersionControlServer.QueryRootBranchObjects verwenden, um alle Zweige in der Versionskontrolle abzufragen. Mit RecursionType.Full als Parameter für diese Methode erhalten Sie eine BranchObject Array aller Zweige ohne Eltern und alle ihre Nachkommen. Anschließend können Sie einen Zweig für einen bestimmten Dateipfad wie folgt ermitteln:

var collection = new TfsTeamProjectCollection(new Uri("http://tfsuri")); 
var versionControl = collection.GetService<VersionControlServer>(); 

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

var mergeFilePath = "$/project/dev/feature/new_one/path/to/file.txt"; 
var branch = branchObjects.SingleOrDefault(b => { 
      var branchPath = b.Properties.RootItem.Item; 
      return mergeFilePath.StartsWith(branchPath.EndsWith("/") ? branchPath : branchPath + "/"); 
     }); 

Console.WriteLine(branch.Properties.RootItem.Item); 

Wie gezeigt, der Pfad zum Zweig ist bei BranchObject.Properties.RootItem.Item. Ich glaube, dass es sicher ist, das relevante BranchObject in dem Array zu finden, indem einfach geprüft wird, welcher Zweigpfad in dem Pfad der Zusammenführungsdatei enthalten ist (vorausgesetzt, es ist nur möglich, höchstens einen Zweig zu erfüllen, da TFS erzwingt, dass nur ein Zweig in einem bestimmten Ordner vorhanden sein kann) Hierarchie).

Nur um zu wissen, wurde ich von this verbrannt Verbindungsproblem bei der Verwendung von QueryRootBranchObjects in TFS 2012. Die Ursache waren einige unechte Zweige, die Apostrophen im Zweignamen hatte.

Die Problemumgehung zu diesem Zweck ist VersionControlServer.QueryBranchObjects zu verwenden, jedoch erfordert dies eine Elementkennung, die den genauen Pfad zu der Verzweigung ist. Offensichtlich kennen Sie den Zweigpfad an diesem Punkt nicht, da Sie nur einen Dateipfad haben. Daher müssen Sie jedes Mal die Verzeichnisse des Dateipfads, der QueryBranchObjects aufruft, erneut durchsuchen, bis Sie eine Übereinstimmung erhalten.

+0

Diese Lösung ist meine Fallback, aber es gefällt mir nicht aus 2 Gründen: 1. Wenn Ihre Eltern Zweig ist kein Zweig, aber immer noch ein Ordner in tfs, können Sie es mit QueryRootBranchObjects() und kann nicht finden Sie es 2. Wenn Sie mehrere Zweige haben Name dev, dev/test, dev/test2, dev/test3 und in Ihrem Quellcode haben Sie einen Ordner "test" könnte es feststellen, dass der gute Elternzweig ist "dev" und in der Tat war es "dev/test". Sie können nicht 100% sicher sein :(Auch wenn es in seltenen Fällen ... – Philippe

+0

Ich habe eine Bearbeitung gemacht. 2. Ist einfach genug zu lösen, und es ist nicht möglich, einen Zweig '$/dev' dann einen anderen zu haben verzweigen Sie unter $/dev/test.TFS erlaubt dies nicht im Verzweigungsschritt. –

Verwandte Themen