2010-09-13 5 views
6

Ich habe eine sehr unordentliche TFS-Struktur, die ich versuche aufzuräumen (danke an meinen Vorgänger). Ich habe jetzt eine Situation, in der ich Changesets selektiv von einem Zweig zum anderen bringen muss, wo sie keine Eltern/Kind-Beziehung haben, und ich möchte nicht, dass diese Änderungen ihren gemeinsamen Stamm passieren. Wie kann ich das machen?Wie kann ich in TFS einen Changeset für einen anderen Zweig auswählen?

Ich habe versucht eine unbegründete Zusammenführung - In TFS, how do I do a baseless merge on specific changesets? - die mir sagte, dass es keine Änderungen zu verschmelzen gab.

Was ich erreichen möchte, ist so etwas wie TFS : Can a shelveset be restored to another location? außer mit einem Changeset.

In GIT Ich denke, das wäre eine einfache Kirsche-Pick.

Meine Struktur sieht so etwas wie:

Y-C1-C2-C3 
/
X------------- 
    \ 
    Z 

Und die Frage ist, wie kann ich C2 von Y in Z erhalten, ohne durch X vorbei?

+0

Welche Optionen haben Sie in Ihrem Basislosen Merge-Versuch verwendet? Haben Sie die Option/force verwendet? –

+0

Ja, ich versuchte Kraft und ein paar andere Dinge, die ich in der Gegend las, aber mit dem gleichen Ergebnis - dass es keine Änderungen gab. Am Ende habe ich die Kugel gebissen und alles manuell zusammengeführt ... es hat 14 Stunden gedauert, aber zumindest bin ich zu 100% zuversichtlich in das Ergebnis. – idieeasy

Antwort

3

Wir haben eine ähnliche Situation, aber in unserem Fall machen wir eine unbegründete Zusammenführung von mehreren Zweigen in einen "scratch" Build-Zweig. Die einzige Möglichkeit, dies zu tun, ist, unser eigenes Dienstprogramm zu schreiben, das die TFS-API nutzt.

Die gute Nachricht ist, dass Sie dies in weniger als ein paar hundert Zeilen Code erreichen können.

Die grundlegenden Schritte sind:

  • Connect zu TFS
  • eine Instanz des VersionControlServer Get (lass es VCS nennen)
  • erstellen Arbeitsplatz
  • Führen Sie eine VCS.GetChangeset()
  • Iterate durch Die Changes, um eine Liste der Artikel zu erhalten, die geändert wurden
  • Führen Sie eine Workspace.Merge für jedes Element von Ihrem Quellzweig zu Ihrem Zielzweig.
  • Die Artikel in der Zielfiliale einchecken.
  • löschen Arbeitsplatz
+0

Es sieht so aus, als ob dies der einzige Weg ist, es manuell zu erledigen (was ich eher getan habe, als mein Team zu halten). Es sollte ein einfaches/häufiges Problem sein? – idieeasy

+0

Best Practices sagen, dass Sie nicht wählen sollten. Wenn Sie das häufig tun, liegt ein Problem mit Ihrer Verzweigungsstrategie vor. Sie sollten stattdessen eine Verzweigung für ein Feature in Betracht ziehen. In unserer Situation machen wir das für Testversionen. – Robaticus

+0

Sie haben absolut Recht, es gab ein Problem mit der Verzweigungsstrategie und diese Frage entstand, als ich versuchte, die Zweige neu zu ordnen, so dass ich nicht so viel Schwierigkeiten beim Zusammenführen hätte. – idieeasy

1

Sein einfacher von Visual Studio zu tun, es zu benutzen.

Verwenden Sie in Visual Studio den Assistenten zum Zusammenführen der Quellcodeverwaltung, um die nicht verwandten Zweige zusammenzuführen.

Es verfügt über eine Option, selektive Änderungssets zusammenzuführen. Die einzige Einschränkung besteht darin, dass die Changesets fortlaufend sein müssen.

+0

Wenn Sie nicht aufeinanderfolgende Changesets zusammenführen möchten, wiederholen Sie einfach den Source Control Merge Wizard, bis Sie fertig sind. Sie können wählen, ob Sie zwischen jeder Zusammenführung festschreiben oder am Ende eine Festschreibung durchführen möchten. –

Verwandte Themen