Freigeben über


Merge-Befehl (Team Foundation-Versionskontrolle)

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Der tf merge-Befehl wendet Änderungen aus einem Branch in einen anderen Branch in der Team Foundation-Versionskontrolle (TFVC) an.

Hinweis

Die Ergebnisse dieses Befehls werden erst auf dem Azure DevOps-Server widergespiegelt, wenn Sie einen Check-In-Vorgang ausführen. Weitere Informationen finden Sie unter Entwickeln von Code und Verwalten ausstehender Änderungen.

Voraussetzungen

Um den merge-Befehl verwenden zu können, müssen Sie die Berechtigung Check-Out für den Arbeitsbereichsordner, der das destination enthält, auf Zulassen festgelegt haben, und Sie müssen die Leseberechtigung auf Zulassen für den Arbeitsbereichsordner festgelegt haben, der die source enthält. Weitere Informationen finden Sie unter TFVC-Standardberechtigungen.

Syntax

tf merge [/recursive] [/force] [/candidate] [/discard] 
[/version:versionspec] [/lock:none|checkin|checkout] [/preview] 
[/baseless] [/nosummary] [/noimplicitbaseless] [/conservative] [/format:(brief|detailed)] [/noprompt] [/login:username,[password]] source destination

Parameter

Argumente

Argument

Beschreibung

<versionspec>

Stellt einen Wert wie C2 für die /version-Option bereit. Weitere Informationen dazu, wie TFVC eine Versionsspezifikation analysiert, um zu bestimmen, welche Elemente in ihrem Gültigkeitsbereich liegen, finden Sie unter Verwenden von Befehlen der Team Foundation-Versionskontrolle.

<source>

Gibt die Datei oder den Ordner an, die bzw. der als Quelle des Mergevorgangs fungieren soll.

<destination>

Gibt die Datei oder den Ordner an, die bzw. der als Ziel des Mergevorgangs fungieren soll.

<username>

Stellt einen Wert für die /login-Option bereit. Sie können einen username-Wert als DOMAIN\username oder username angeben.

Tastatur

Option

Beschreibung

/recursive

Entspricht der source-Elementspezifikation im aktuellen Verzeichnis und allen Unterordnern.

/force

Ignoriert den Mergeverlauf und mergt die angegebenen Änderungen aus der Quelle in das Ziel, auch wenn einige oder alle dieser Änderungen bereits zuvor gemergt wurden.

/candidate

Gibt eine Liste aller Changesets in der Quelle aus, die noch nicht mit dem Ziel gemergt wurden. Die Liste sollte die Changeset-ID enthalten, die nicht gemergt wurde, und andere grundlegende Informationen zu diesem Changeset. Ein Sternchen für ein bestimmtes Ergebnis gibt an, dass es teilweise gemergt wurde, was bedeutet, dass einige Änderungen im Changeset gemergt und andere Änderungen nicht gemergt wurden.

/discard

Führt den Mergevorgang nicht aus, aktualisiert aber den Mergeverlauf, um nachzuverfolgen, ob der Mergevorgang stattgefunden hat. Dadurch wird verworfen, dass ein Changeset für einen bestimmten Mergevorgang verwendet wird.

/version

Bei einem selektiven Mergevorgang gibt diese Option den Bereich an, der mit dem Ziel gemergt werden soll. Für einen nachholenden Mergevorgang gibt dieser Parameter die Version an, vor der alle nicht gemergten Änderungen gemergt werden sollen.

Bei einem selektiven Mergevorgang gibt der Versionsbereich die Anfangs- und Endpunkte der Gruppe von Änderungen an, die gemergt werden sollen. Wenn Sie beispielsweise versuchen, Version 4~6 zu mergen, werden die Changesets 4, 5 und 6 gemergt.

/lock

Gibt einen Sperrtyp an oder entfernt eine Sperre von einem Element. Weitere Informationen finden Sie unter Grundlegendes zu Sperrtypen.

Sperroptionen:

  • None: Platziert keine Sperre auf einem Element und entfernt eine vorhandene Sperre vom Element.

  • Checkin: Andere Benutzer können die angegebenen Elemente auschecken, aber sie können Revisionen für gesperrte Dateien erst einchecken, wenn Sie die Sperre durch Ausführen eines Check-In-Vorgangs freigeben. Wenn andere Benutzer eines der angegebenen Elemente gesperrt haben, tritt beim Sperrvorgang ein Fehler auf.

  • Checkout: Verhindert, dass Benutzer die angegebenen Elemente ein- oder auschecken, bis Sie die Sperre explizit freigeben. Wenn andere Benutzer eines der angegebenen Elemente gesperrt haben oder wenn Änderungen für ein Element ausstehen, schlägt der Sperrvorgang fehl.

/preview

Zeigt eine Vorschau des Mergevorgangs an.

/baseless

Führt einen Mergevorgang ohne Basisversion aus. Das heißt, der Benutzer kann Dateien und Ordner mergen, die keine Mergebeziehung aufweisen. Nach einem basislosen Mergevorgang ist eine Mergebeziehung vorhanden, und zukünftige Mergevorgänge müssen nicht basislos sein.

Hinweis

Basislose Mergevorgänge können keine Dateien im Ziel löschen. Sie können solche Änderungen manuell übernehmen.

/noimplicitbaseless

Gibt an, dass TFVC keinen impliziten basislosen Mergevorgang zwischen zwei Elementen mit demselben relativen Namen in zwei nicht in Beziehung stehenden Versionskontrollstrukturen durchführen wird.

/nosummary

Lässt die Zusammenfassung von Konflikten, Fehlern und Warnungen aus.

/noprompt

Unterdrückt alle Aufforderungen zu einer Eingabe durch Sie.

/conservative

Führt zu weiteren Konflikten, wenn Sie einen Branch mit einem anderen mergen.

/format

Gibt die Formate der Zusammenfassung von Mergekonflikten an:

  • Brief (Standardeinstellung): Fasst nur die Gesamtzahl von Konflikten, Warnungen und Fehlern zusammen.
  • Detailed: Fasst nicht nur die Gesamtzahl der Konflikte, Warnungen und Fehler zusammen, sondern listet auch Details zu jedem Konflikt auf.

Hinweis

Diese Option gilt nur, wenn die Ausgabe eine Zusammenfassung der Konflikte enthält. Die Zusammenfassung kann nicht angezeigt werden, wenn die /nosummary-Option verwendet wird oder der Mergevorgang weniger als 10 Konflikte, Warnungen und Fehler verursacht hat.

/login

Gibt den Benutzernamen und das Kennwort an, um den Benutzer bei Azure DevOps zu authentifizieren.

Bemerkungen

Sie können den merge-Befehl des Befehlszeilenprogramms tf verwenden, um Änderungen aus einem vorhandenen Quellbranch auf einen vorhandenen Zielbranch anzuwenden. Sie können eine einzelne Revision oder ein vollständiges Changeset mit dem Zielbranch mergen. Sie können Änderungen aus der Quelle in den Zielbranch oder aus dem Ziel in den Quellbranch mergen.

Mit dem merge-Befehl können Sie auch Änderungen in einem Quellbranch abfragen, die nicht zum Zielbranch migriert wurden. Mit dem Befehl können Sie auch angeben, dass bestimmte Änderungen nie aus der Quelle mit dem Ziel gemergt werden und nicht mehr als Kandidaten für einen Mergevorgang angezeigt werden sollten.

Weitere Informationen zur Verwendung des Befehlszeilenhilfsprogramms tf finden Sie unter Verwenden von Befehlen der Team Foundation-Versionskontrolle.

Basisloser Mergevorgang

Verwenden einen basislosen Mergevorgang, um Elemente zu mergen, die nicht direkt miteinander verzweigt sind. Um einen basislosen Mergevorgang auszuführen, müssen Sie den tf merge-Befehl verwenden. Wenn Sie einen basislosen Mergevorgang durchführen, verfügt TFVC über keinerlei Informationen über die Beziehung der Dateien in den Branches. Bei einem basislosen Mergevorgang müssen Sie manuelle Konfliktlösungen ausführen. Nachdem Sie den basislosen Mergevorgang abgeschlossen und alle Konflikte aufgelöst haben, zeichnet TFVC den Mergeverlauf auf und stellt eine Beziehung zwischen den Ordnern und Dateien her.

Wenn Sie tf merge ausführen, führt TFVC einen impliziten basislosen Mergevorgang zwischen Elementen durch, die denselben relativen Namen in zwei zuvor in Beziehung gesetzten versionsgesteuerten Strukturen aufweisen. Beispielsweise können Sie die in Beziehung stehenden Branches $SRC und $TGT mergen. Beide Branches enthalten eine nicht in Beziehung stehende Datei mit dem Namen a.txt. Wenn Sie tf merge ausführen, stellt TFVC eine Beziehung zwischen den beiden a.txt-Dateien her, wenn die beiden Dateien identisch sind, FIPS-kompatible Verschlüsselung deaktiviert ist und die Quelldatei mit keiner anderen Datei im Ziel in Beziehung steht.

Wenn Sie tf merge mit der festgelegten Option /noimplicitbaseless ausführen und TFVC versucht, die beiden Branches zu mergen, verursachen die beiden Dateien a.txt einen Namespacekonflikt, wenn Sie versuchen, die Änderungen einzuchecken. Um den Konflikt zu aufzulösen, müssen Sie eine der Dateien umbenennen.

Beispiele

Im folgenden Beispiel werden Änderungen aus MyFile_beta1 gemergt, die nicht in MyFile_RTM gemergt wurden.

c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive

Im folgenden Beispiel wird Changeset 137 in branch2 gemergt.

c:\projects>tf merge /version:C137~C137 branch1 branch2 /recursive

Im folgenden Beispiel werden alle Changesets bis zu Changeset 137 in branch2 gemergt.

c:\projects>tf merge /version:C137 branch1 branch2 /recursive

Im folgenden Beispiel wird eine Liste der Changesets in branch1 ausgegeben, die nicht in branch2 gemergt wurden.

c:\projects>tf merge /candidate branch1 branch2 /recursive

Im folgenden Beispiel wird eine Liste von Changesets in branch2 ausgegeben, die nicht zurück in branch1 gemergt wurden.

c:\projects>tf merge /candidate branch2 branch1 /recursive

Im folgenden Beispiel wird Changeset 137 als Kandidat für das Mergen in branch2 verworfen.

c:\projects>tf merge /discard /version:C137~C137 branch1 branch2 /recursive

Im folgenden Beispiel werden alle Changesets bis zu Changeset 137 als Kandidaten für das Mergen in branch2 verworfen.

c:\projects>tf merge /discard /version:C137 branch1 branch2 /recursive