共用方式為


變更預設分支

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

預設分支是 Git 在全新複製品上會切換到的第一個分支。 此外, 提取要求 預設會以這個分支為目標。

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

先決條件

類別 需求
專案存取 專案的成員。
許可 - 在私人項目中檢視程式碼:至少 基本 權限。
- 複製或貢獻私人專案中的程式碼:作為 貢獻者 安全群組的成員或在專案中具有相應的許可權。
- 設定分支或存放庫許可權:管理分支或存放庫的許可權 許可權。
- 變更預設分支:編輯原則 存放庫的許可權。
- 匯入存放庫:專案管理員成員 安全組或 Git 專案層級 建立存放庫 許可權設定為 允許。 如需詳細資訊,請參閱 設定 Git 存放庫許可權
服務 啟用 Repos
工具 選擇性。 使用 az repos 命令:Azure DevOps CLI

備註

在公用專案中,具有 項目關係人 存取權的使用者具有 Azure Repos 的完整存取權,包括檢視、複製及參與程式代碼。

類別 需求
專案存取 專案的成員。
許可 - 查看程式碼:至少 基本 權限。
- 複製程式碼或貢獻程式碼:屬於 參與者安全組 的成員或具有專案中的對應許可權。
服務 啟用 Repos

設定新的預設分支

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

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

備註

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

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

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

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

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

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

選擇名稱

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 區段,而且可以保留 as-is。 此外,一旦您刪除舊的預設分支,嘗試導航至它時,將會自動進入新的預設分支。

暫存鏡像

Git 存放庫只能有一個預設分支。 不過,暫時,您可以設定舊預設值與新預設值之間的臨時鏡像。 如此一來,如果您的最終使用者繼續使用舊的預設設定,他們就不需要重做任何工作。 我們將使用 Azure Pipelines 來設定此暫時鏡像。

備註

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

鏡像管線

備註

這些指示並非萬無一失,您的存放庫設定可能需要額外的變更,例如放寬權限與政策。

警告

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

  1. 請將所有現有的 CI 構建更新為對新的預設分支進行觸發,而不是舊分支。

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

  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. 然後鏡像管線應該負責將合併認可鏡像回到舊的預設值。