Ändern des Standardbranches

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

Der Standardbranch ist der erste Branch, den Git bei einem neuen Klon auscheckt. Außerdem zielen Pull Requests standardmäßig auf diesen Branch ab.

Wir werden den Prozess zum Ändern des Standardbranchs durchgehen. Wir behandeln auch andere Dinge, die Sie berücksichtigen und aktualisieren müssen, wenn Sie diese Änderung vornehmen. Schließlich sehen wir uns ein Tool an, das den Übergang erleichtert.

Festlegen eines neuen Standardbranchs

Sie können einen anderen Branch als main für neue Änderungen verwenden oder Ihre Hauptentwicklungslinie in Ihrem Repository ändern. Informationen zum Ändern des Standardbranchnamens für neue Repositorys finden Sie unter Einstellungen und Richtlinien für alle Repositorys.

Um den Standardbranch Ihres Repositorys zum Zusammenführen neuer Pull Requests zu ändern, benötigen Sie mindestens zwei Branches. Wenn nur ein Branch vorhanden ist, ist dieser bereits der Standardbranch. Sie müssen einen zweiten Branch erstellen, um den Standardbranch zu ändern.

Hinweis

Wenn Sie die Standardbranch ändern, müssen Sie über die Berechtigung zum Bearbeiten von Richtlinien verfügen. Weitere Informationen finden Sie unter Festlegen von Git-Repositoryberechtigungen.

  1. Wählen Sie unter Ihrem Projektrepository den Eintrag Branches aus.

  2. Wählen Sie auf der Seite Branches neben dem von Ihnen gewünschten neuen Standardbranch Weitere Optionen aus, und wählen Sie Als Standardbranch festlegen aus.

    Screenshot von „Standardbranch festlegen“.

  3. Nachdem Sie den neuen Standardbranch festgelegt haben, können Sie bei Bedarf die vorherige Standardeinstellung löschen.

  1. Wählen Sie die Schaltfläche „Einstellungen“ unten links in Ihrem Projekt aus, um die Projektverwaltungsseite zu öffnen.

    Öffnen des Verwaltungsbereichs des Webportals für Ihr Projekt

  2. Wählen Sie Repositorys aus.

  3. Wählen Sie Ihr Git-Repository aus. Ihre Branches werden unter Ihrem Repository angezeigt.

  4. Wählen Sie ... neben dem Branch aus, den Sie als Standard festlegen möchten, und wählen Sie dann Als Standardbranch festlegen aus.

    Festlegen eines Standardbranchs für ein Git-Repository

  5. Nachdem Sie den neuen Standardbranch festgelegt haben, können Sie bei Bedarf den vorherigen löschen.

Es gibt weitere Aspekte, die Sie berücksichtigen sollten, bevor Sie diese Änderung vornehmen.

Wählen Sie einen Namen aus.

Mit Git 2.28 wurde die Möglichkeit hinzugefügt, einen anfänglichen Branchnamen auszuwählen. Gleichzeitig haben Azure Repos, GitHub und andere Git-Hostinganbieter die Möglichkeit hinzugefügt, einen anderen anfänglichen Branchnamen auszuwählen. Bisher hieß die Standardbranch fast immer master. Der beliebteste alternative Name ist main. Weniger häufig verwendete Optionen sind trunk und development. Wenn keine Einschränkungen für die Tools, die Sie verwenden, oder das Team, in dem Sie arbeiten, vorliegen, funktionieren alle gültigen Branchnamen.

Aktualisieren anderer Systeme

Wenn Sie zu einem anderen Standardbranch wechseln, sind möglicherweise andere Teile Ihres Workflows betroffen. Sie müssen diese Teile berücksichtigen, wenn Sie eine Änderung planen.

Pipelines

Aktualisieren Sie die CI-Trigger für alle Pipelines. Designer-Pipelines können im Web bearbeitet werden. YAML-Pipelines können in ihren jeweiligen Repositorys bearbeitet werden.

In-Flight Pull Requests

Richten Sie jeden geöffneten Pull Request auf den neuen Standardbranch als Ziel aus.

Vorhandene Klone

Neue Klone des Repositorys erhalten den neuen Standardbranch. Nach dem Wechsel sollte jeder mit einem vorhandenen Klon git remote set-head origin -a ausführen (ersetzen Sie dabei origin durch den Namen des Remoterepositorys, wenn es sich um ein anderes handelt), um seine Ansicht des Standardbranchs des Remoterepositorys zu aktualisieren. Zukünftige neue Branches sollten auf der neuen Standardeinstellung basieren.

Einige Lesezeichen, Dokumente und andere Nichtcodedateien, die auf Dateien in Azure Repos verweisen, müssen aktualisiert werden. Der Branchname für eine Datei oder ein Verzeichnis kann in der URL angezeigt werden.

Wenn eine URL eine Abfragezeichenfolge für version enthält, z. B. &version=GBmybranchname, sollte diese URL aktualisiert werden. Glücklicherweise enthalten die meisten Links zum Standardbranch kein version-Segment und können unverändert bleiben. Sobald Sie den alten Standardbranch gelöscht haben, werden Versuche, zu diesem zu navigieren, sowieso zum neuen Standardbranch umgeleitet.

Temporäre Spiegelung

Ein Git-Repository kann nur einen Standardbranch haben. Sie können jedoch für einen gewissen Zeitraum Ad-hoc-Spiegelung zwischen Ihrem alten Standardbranch und dem neuen Standardbranch einrichten. Auf diese Weise müssen Ihre Endbenutzer die Arbeit nicht wiederholen, wenn sie weiterhin in den alten Standardbranch pushen. Wir verwenden Azure Pipelines, um diese temporäre Spiegelung einzurichten.

Hinweis

In diesem Abschnitt wird eine Sprache verwendet, die mit der Perspektive von Microsoft nicht übereinstimmt. Insbesondere kommt das Wort master an mehreren Stellen vor, die mit seiner Verwendung in Git konsistent sind. Der Zweck dieses Themas ist es, zu erläutern, wie Sie zu einer inklusiveren Sprache wechseln, z. B. main. Wenn wir jegliche Erwähnung von master vermeiden würden, würden die Anweisungen viel schwieriger zu verstehen sein.

Die Spiegelungspipeline

Hinweis

Diese Anweisungen sind nicht narrensicher, und Ihre Repositoryeinrichtung erfordert möglicherweise zusätzliche Änderungen, z. B. das Lockern von Berechtigungen und Richtlinien.

Warnung

Wenn sowohl die alten als auch die neuen Standardbranches aktualisiert werden, bevor diese Pipeline ausgeführt wird, kann die Pipeline die Änderungen nicht spiegeln. Jemand muss den alten Standardbranch manuell in den neuen Standardbranch zusammenführen (mergen), damit die automatische Verwendung wieder funktioniert.

  1. Aktualisieren Sie für alle vorhandenen CI-Builds diese so, dass sie für Ihren neuen Standardbranch ausgelöst werden, anstatt für den alten.

  2. Erteilen Sie der Buildidentität die Berechtigung Mitwirken für Ihr Repository. Navigieren Sie zu Projekteinstellungen>Repositorys>(Ihr Repository)>Berechtigungen. Es können bis zu zwei Identitäten vorhanden sein: eine für den Projektsammlungs-Builddienst und die andere für den Projektbuilddienst. Stellen Sie sicher, dass die Berechtigung „Mitwirken“ auf Allow (Zulassen) festgelegt ist.

  1. Wenn der neue Standardbranch über Branchrichtlinien verfügt, erteilen Sie der Buildidentität außerdem die Berechtigung Richtlinien bei Pushvorgängen umgehen. Diese Berechtigung stellt ein Sicherheitsrisiko dar, da ein böswilliger Benutzer eine Pipeline erstellen könnte, um Code in ein Repository in Ihrem Projekt einzuschleusen. Wenn die Spiegelung nicht mehr benötigt wird, stellen Sie sicher, dass Sie diese Berechtigung entfernen.

  2. Fügen Sie Ihrem Repository im neuen Standardbranch eine neue Datei mirror.yml hinzu. In diesem Beispiel wird davon ausgegangen, dass der alte Standardbranch master war und der neue main ist. Aktualisieren Sie die auslösenden Branches und die git push-Zeile, wenn sich Ihre Branchnamen unterscheiden.

trigger:
  branches:
    include:
    - main
    - master
 
pool: { vmImage: ubuntu-latest }
steps:
- checkout: self
  persistCredentials: true
- script: |
    git checkout $(Build.SourceBranchName)
    git push origin HEAD:master HEAD:main
  displayName: Mirror old and new default branches
  1. Erstellen Sie eine neue Pipeline, und wählen Sie dabei im Assistenten „Azure Repos Git“ und „Vorhandene Azure Pipelines YAML-Datei“ aus. Wählen Sie die mirror.yml-Datei aus, die Sie im vorherigen Schritt hinzugefügt haben. Speichern Sie die Pipeline, und führen Sie sie aus.

Problembehandlung

Diese Pipeline wird jedes Mal ausgeführt, wenn ein Push in master oder in main erfolgt. Sie hält die Branches synchronisiert, solange keine neuen Commits gleichzeitig in beiden Branches eingehen.

Wenn die Pipeline mit einer Fehlermeldung wie „Updates wurden abgelehnt, weil eine gepushte Branchspitze hinter der Remoteversion zurückliegt“ fehlschlägt, muss jemand den alten Branch manuell in den neuen Branch zusammenführen.

  1. Klonen Sie das Repository und cd in das zugehörige Verzeichnis.
  2. Checken Sie den neuen Standardbranch mit git checkout main aus (falls main Ihr neuer Standardbranch ist).
  3. Erstellen Sie einen neuen Branch zum Integrieren der zwei Branches in git checkout -b integrate.
  4. Führen Sie den alten Standardbranch mit git merge master (falls master Ihr alter Standardbranch ist).
  5. Pushen Sie den neuen Branch, öffnen Sie einen Pull Request in den neuen Standardbranch, und schließen Sie diesen ab.
  6. Die Spiegelungspipeline sollte dann dafür sorgen, dass der Mergecommit wieder in den alten Standardbranch gespiegelt wird.