Udostępnij za pośrednictwem


Zmienianie gałęzi domyślnej

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

Gałąź domyślna to pierwsza gałąź, którą usługa Git wyewidencjonuje na nowym klonie. Ponadto żądania ściągnięcia domyślnie kierują się na tę gałąź.

Omówimy proces zmiany gałęzi domyślnej. Omówimy również inne kwestie, które należy wziąć pod uwagę i zaktualizować podczas wprowadzania tej zmiany. Na koniec przyjrzymy się narzędziu do złagodzenia przejścia.

Wymagania wstępne

Kategoria Wymagania
Dostęp do projektu Członek projektu .
uprawnienia — Wyświetlanie kodu w projektach prywatnych: co najmniej dostęp na poziomie Podstawowym.
— Klonowanie lub współtworzenie kodu w prywatnych projektach: członkostwo w grupie zabezpieczeń Współautorzy lub odpowiednie uprawnienia w projekcie.
— Ustaw uprawnienia gałęzi lub repozytorium: Zarządzanie uprawnieniami dla gałęzi lub repozytorium.
- Zmień gałąź domyślną: Edytuj zasady uprawnienia dla repozytorium.
— Zaimportuj repozytorium: członek grupy zabezpieczeń Administratorzy projektów lub uprawnienia na poziomie projektu Git Utwórz repozytorium ustawione na Dozwolone. Aby uzyskać więcej informacji, zobacz Ustawianie uprawnień repozytorium Git.
Usługi Repozytoria włączone.
Narzędzia Opcjonalny. Użyj poleceń az repos: Azure DevOps CLI.

Uwaga

W projektach publicznych użytkownicy z dostępem Stakeholder mają pełny dostęp do usługi Azure Repos, w tym wyświetlanie, klonowanie i współtworzenie kodu.

Kategoria Wymagania
Dostęp do projektu Członek projektu .
uprawnienia — Wyświetl kod: przynajmniej podstawowy dostęp.
— Klonowanie lub współtworzenie kodu: członek grupy zabezpieczeń Współtwórców lub posiadający odpowiednie uprawnienia w projekcie.
Usługi Repozytoria włączone.

Ustawianie nowej gałęzi domyślnej

Możesz użyć gałęzi innej niż main dla nowych zmian lub zmienić główny wiersz programowania w repozytorium. Aby zmienić domyślną nazwę gałęzi dla nowych repozytoriów, zobacz Ustawienia i zasady wszystkich repozytoriów.

Aby zmienić domyślną gałąź repozytorium na potrzeby scalania nowych żądań ściągnięcia, potrzebujesz co najmniej dwóch gałęzi. Jeśli istnieje tylko jedna gałąź, jest już domyślna. Aby zmienić wartość domyślną, musisz utworzyć drugą gałąź.

Uwaga

Zmiana gałęzi domyślnej wymaga posiadania uprawnień do edytowania zasad (). Aby uzyskać więcej informacji, zobacz Ustawianie uprawnień repozytorium Git.

  1. W repozytorium projektu wybierz pozycję Gałęzie.

  2. Na stronie Gałęzie wybierz pozycję Więcej opcji obok nowej domyślnej gałęzi, a następnie wybierz Ustaw jako gałąź domyślną.

    Zrzut ekranu przedstawiający ustawienie gałęzi domyślnej.

  3. Po ustawieniu nowej gałęzi domyślnej możesz usunąć poprzednią wartość domyślną, jeśli chcesz.

Przed wprowadzeniem tej zmiany należy wziąć pod uwagę inne aspekty.

Wybierz nazwę

git 2.28 dodano możliwość wybierania początkowej nazwy gałęzi. Jednocześnie usługa Azure Repos, GitHub i inni dostawcy hostingu Git dodali możliwość wyboru innej początkowej nazwy gałęzi. Wcześniej gałąź domyślna miała prawie zawsze nazwę master. Najpopularniejszą alternatywną nazwą jest main. Mniej typowe opcje obejmują trunk i development. Jeśli nie ma żadnych ograniczeń w narzędziach, których używasz, ani w zespole, w którym pracujesz, każda prawidłowa nazwa gałęzi będzie działać.

Aktualizowanie innych systemów

Zmiana na inną gałąź domyślną może mieć wpływ na inne części przepływu pracy. Podczas planowania zmiany należy wziąć pod uwagę te części.

Rurociągi

Zaktualizuj wyzwalacze CI dla wszystkich potoków. Procesy projektowe można edytować w Internecie. Potoki YAML można edytować w odpowiednich repozytoriach.

Żądania ściągnięcia w locie

Przekieruj każdy otwarty pull request do nowej gałęzi domyślnej.

Istniejące klony

Nowe klony repozytorium otrzymają nową gałąź domyślną. Po przełączeniu wszyscy z istniejącym klonem powinni uruchomić git remote set-head origin -a (zastępując origin nazwą zdalną, jeśli jest to coś innego), aby zaktualizować widok gałęzi domyślnej zdalnego. Przyszłe nowe gałęzie powinny być oparte na nowej wartości domyślnej.

Niektóre zakładki, dokumenty i inne pliki inne niż kod, które wskazują pliki w usłudze Azure Repos, muszą zostać zaktualizowane. Nazwa gałęzi pliku lub katalogu może być wyświetlana w adresie URL.

Jeśli adres URL zawiera ciąg zapytania dla version, na przykład &version=GBmybranchname, należy zaktualizować ten adres URL. Na szczęście większość linków do gałęzi domyślnej nie będzie miała segmentu version i może pozostać as-is. Ponadto, po usunięciu starej gałęzi domyślnej, próby przejścia do niej zostaną automatycznie przekierowane do nowej domyślnej gałęzi.

Tymczasowe lustrzanie

Repozytorium Git może mieć tylko jedną gałąź domyślną. Przez pewien czas można skonfigurować ad hoc synchronizację między starą wartością domyślną a nową wartością domyślną. W ten sposób, jeśli użytkownicy końcowi będą nadal przełączać się na starą wartość domyślną, nie będą musieli wykonywać pracy ponownie z ich strony. Użyjemy usługi Azure Pipelines do skonfigurowania tego tymczasowego mirroringu.

Uwaga

W tej sekcji jest używany język, który jest sprzeczny z perspektywą firmy Microsoft. W szczególności słowo master pojawia się w kilku miejscach spójnych ze sposobem jego użycia w usłudze Git. Celem tego tematu jest wyjaśnienie, jak przełączyć się na bardziej inkluzywny język, na przykład main. Unikanie wszystkich wspomnień o master utrudniłoby zrozumienie wskazówek.

Potok dublowania

Uwaga

Te instrukcje nie są niezawodne, a konfiguracja repozytorium może wymagać dodatkowych zmian, takich jak poluzowanie uprawnień i zasad.

Ostrzeżenie

Jeśli stare i nowe gałęzie domyślne zostaną zaktualizowane przed uruchomieniem potoku, potok nie będzie mógł odzwierciedlać zmian. Ktoś będzie musiał ręcznie scalić starą gałąź domyślną z nową gałęzią domyślną, aby ponownie uruchomić ją automatycznie.

  1. W przypadku wszystkich istniejących kompilacji ciągłej integracji zaktualizuj je, aby wyzwalać względem nowej gałęzi domyślnej zamiast starej.

  2. Udziel tożsamości kompilacji współtworzenie uprawnienia do repozytorium. Przejdź do Ustawienia projektu>Repozytoria>(Twoje repozytorium)>Uprawnienia. Może istnieć do dwóch tożsamości— jedna dla usługi kompilacji kolekcji projektów, a druga dla usługi kompilacji projektu. Upewnij się, że uprawnienia do współpracy mają Zezwalaj.

  1. Jeśli nowa gałąź domyślna ma zasady gałęzi, przyznaj również tożsamość kompilacji zasady obejścia podczas wypychania uprawnień. To uprawnienie stanowi zagrożenie bezpieczeństwa, ponieważ złośliwy użytkownik mógłby utworzyć pipeline, aby przemycić kod do repozytorium w projekcie. Gdy dublowanie nie jest już potrzebne, upewnij się, że usunąć to uprawnienie.

  2. Dodaj nowy plik, mirror.yml do repozytorium w nowej gałęzi domyślnej. W tym przykładzie przyjęto założenie, że stara gałąź domyślna została master, a nowa gałąź jest main. Zaktualizuj gałęzie wyzwalające i wiersz git push, jeśli nazwy gałęzi są inne.

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. Utwórz nową linię przetwarzania, wybierając opcję "Azure Repos Git" i "Istniejący plik YAML usługi Azure Pipelines" w kreatorze konfiguracji. Wybierz plik mirror.yml dodany w poprzednim kroku. Zapisz i uruchom potok.

Rozwiązywanie problemów

Ten pipeline będzie uruchamiany przy każdym wypychaniu do master lub main. Zachowa to synchronizację tak długo, jak nowe zatwierdzenia nie są dostarczane jednocześnie w obu gałęziach.

Jeśli potok zaczyna zawodzić z komunikatem o błędzie, takim jak "Aktualizacje zostały odrzucone, ponieważ wypchnięty wierzchołek gałęzi znajduje się za jego zdalnym odpowiednikiem", ktoś będzie musiał ręcznie scalić starą gałąź z nową gałęzią.

  1. Sklonuj repozytorium i cd do jego katalogu.
  2. Przełącz na nową gałąź domyślną git checkout main (jeśli main jest twoją nową gałęzią domyślną).
  3. Utwórz nową gałąź do integracji dwóch gałęzi z git checkout -b integrate.
  4. Połącz starą gałąź domyślną z git merge master (o ile master jest twoją starą gałęzią domyślną).
  5. Wypchnij nową gałąź, a następnie otwórz i ukończ pull request do nowej gałęzi domyślnej.
  6. Potok dublowania powinien następnie uwzględniać dublowanie zatwierdzenia scalania z powrotem do starej wartości domyślnej.