變更預設分支

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

默認分支是第一個 Git 將在全新複製品上籤出的分支。 此外, 提取要求 預設會以這個分支為目標。

我們將逐步解說變更預設分支的程式。 我們也將討論進行這項變更時必須考慮和更新的其他事項。 最後,我們將探討用來緩和轉換的工具。

設定新的預設分支

您可以針對新的變更使用分支 main ,或在存放庫中變更主要開發行。 若要變更新存放庫的預設分支名稱,請參閱 所有存放庫設定和原則

若要變更存放庫的預設分支來合併新的提取要求,您需要至少兩個分支。 如果只有一個分支,它就已經是預設值。 您必須建立第二個分支來變更預設值。

注意

變更預設分支需要您具有 編輯原則 許可權。 如需詳細資訊,請參閱 設定 Git 存放庫許可權

  1. 專案存放庫底下,選取 [ 分支]。

  2. 在 [ 分支] 頁面上,選取 您想要的新預設分支旁的 [更多選項 ],然後選擇 [ 設定為預設分支]。

    顯示 [設定預設分支] 的螢幕快照。

  3. 設定新的預設分支之後,您可以視需要刪除先前的預設值。

  1. 選取專案左下角的 [設定] 按鈕,以開啟 [專案管理] 頁面。

    開啟您專案的入口網站系統管理區域

  2. 選取 [存放庫]

  3. 選取您的 Git 存放庫。 您的分支會顯示在存放庫底下。

  4. 選取您要設定為預設值之分支旁的 ... ,然後選取 [設定為預設分支]。

    設定 Git 存放庫的預設分支

  5. 設定新的預設分支之後,您可以視需要刪除先前的分支。

進行這項變更之前,您應該考慮其他層面。

選擇名稱

Git 2.28 新增了選擇初始分支名稱的功能。 同時,Azure Repos、GitHub 和其他 Git 裝載提供者新增了選擇不同初始分支名稱的功能。 先前,預設分支幾乎一律命名為 master。 最受歡迎的替代名稱是 main。 較不常見的選項包括 trunkdevelopment。 由於您使用的工具或小組沒有任何限制,任何有效的分支名稱都將有效。

更新其他系統

當您變更為不同的預設分支時,工作流程的其他部分可能會受到影響。 規劃變更時,您必須將這些元件納入考慮。

Pipelines

更新所有管線的 CI 觸發程式。 設計工具管線可以在 Web 中編輯。 YAML 管線可以在各自的存放庫中編輯。

正式發行前小眾測試提取要求

將每個開啟的提取要求 複位為新的預設分支。

現有的複製品

存放庫的新複本將取得新的預設分支。 切換之後,具有現有複製品的每個人都應該執行 git remote set-head origin -a (若是其他專案,請以遠端名稱取代 origin ),以更新其遠端預設分支的檢視。 未來的新分支應以新的預設值為基礎。

必須更新指向 Azure Repos 中檔案的部分書籤、檔和其他非程式代碼檔案。 檔案或目錄的分支名稱可能會出現在 URL 中。

如果 URL 包含 的 version查詢字串,例如 &version=GBmybranchname,則應該更新該 URL。 幸運的是,預設分支的大部分連結都不會有 version 區段,而且可以依預設保留。 此外,一旦您刪除舊的預設分支,嘗試流覽至它,無論如何都會移至新的預設值。

暫存鏡像

Git 存放庫只能有一個預設分支。 不過,一段時間后,您可以設定舊預設值與新預設值之間的臨機操作鏡像。 如此一來,如果您的終端用戶繼續推送至舊的預設值,他們就不需要重做其端的工作。 我們將使用 Azure Pipelines 來設定此暫時鏡像。

注意

本節使用與 Microsoft 觀點相矛盾的語言。 具體來說,這個字 master 會出現在幾個與 Git 中使用方式一致的地方。 本主題的目的是要說明如何切換至更具包容性的語言,例如 main。 避免所有提及 master 都會使指示更加難以理解。

鏡像管線

注意

這些指示不是傻瓜證明,您的存放庫設定可能需要額外的變更,例如鬆散許可權和原則。

警告

如果在這個管線執行之前更新舊和新的預設分支,則管線將無法鏡像變更。 有人必須手動 將舊的預設分支合併 到新的預設分支,才能再次自動執行。

  1. 針對所有現有的 CI 組建,更新它們以 針對新的預設分支觸發 ,而不是舊分支。

  2. 將組建身分 識別「參與」 許可權授與存放庫。 流覽至 Project 設定> Repositories>(您的存放庫)>許可權。 最多可能會有兩個身分識別,一個用於專案集合建置服務,另一個用於專案建置服務。 請確定 [參與] 權限顯示 [允許]。

  1. 如果新的預設分支有分支原則,則也會在推送許可權時授與組建身分識別略過原則。 此許可權是安全性風險,因為惡意使用者可能會製作管線,以將程式代碼潛入專案中的存放庫。 不再需要鏡像時, 請務必 移除此許可權。

  2. 在新的預設分支中, mirror.yml 將新的檔案新增至您的存放庫。 在這裡範例中,我們假設舊的預設分支是 master ,而新的分支是 main。 如果您的分支名稱不同, git push 請更新觸發分支和行。

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. 在精靈中選擇 [Azure Repos Git] 和 [現有的 Azure Pipelines YAML 檔案] 來建立新的管線。 mirror.yml選擇您在上一個步驟中新增的檔案。 儲存並執行管線。

疑難排解

每次有推送至 或 至 mastermain時,此管線都會執行。 只要新的認可不會同時抵達這兩個分支,就會讓它們保持同步。

如果管線開始失敗,並出現錯誤訊息,例如「更新 因為推送的分支提示位於其遠端後方」,則有人必須手動將舊分支合併到新的分支。

  1. 將存放庫複製到 cd 其目錄中。
  2. 使用 查看新的預設分支 git checkout main (如果 main 是新的預設分支)。
  3. 建立新的分支,以整合兩個分支與 git checkout -b integrate
  4. 將舊的預設分支與 git merge master 合併(如果 master 是舊的預設分支)。
  5. 推送新的分支,然後開啟並完成提取要求到新的預設分支。
  6. 然後鏡像管線應該負責將合併認可鏡像回到舊的預設值。