變更預設分支
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
默認分支是第一個 Git 將在全新複製品上籤出的分支。 此外, 提取要求 預設會以這個分支為目標。
我們將逐步解說變更預設分支的程式。 我們也將討論進行這項變更時必須考慮和更新的其他事項。 最後,我們將探討用來緩和轉換的工具。
設定新的預設分支
您可以針對新的變更使用分支 main
,或在存放庫中變更主要開發行。 若要變更新存放庫的預設分支名稱,請參閱 所有存放庫設定和原則。
若要變更存放庫的預設分支來合併新的提取要求,您需要至少兩個分支。 如果只有一個分支,它就已經是預設值。 您必須建立第二個分支來變更預設值。
注意
變更預設分支需要您具有 編輯原則 許可權。 如需詳細資訊,請參閱 設定 Git 存放庫許可權。
在 專案存放庫底下,選取 [ 分支]。
在 [ 分支] 頁面上,選取 您想要的新預設分支旁的 [更多選項 ],然後選擇 [ 設定為預設分支]。
設定新的預設分支之後,您可以視需要刪除先前的預設值。
選取專案左下角的 [設定] 按鈕,以開啟 [專案管理] 頁面。
選取 [存放庫]。
選取您的 Git 存放庫。 您的分支會顯示在存放庫底下。
選取您要設定為預設值之分支旁的 ... ,然後選取 [設定為預設分支]。
設定新的預設分支之後,您可以視需要刪除先前的分支。
進行這項變更之前,您應該考慮其他層面。
選擇名稱
Git 2.28 新增了選擇初始分支名稱的功能。
同時,Azure Repos、GitHub 和其他 Git 裝載提供者新增了選擇不同初始分支名稱的功能。
先前,預設分支幾乎一律命名為 master
。
最受歡迎的替代名稱是 main
。
較不常見的選項包括 trunk
和 development
。
由於您使用的工具或小組沒有任何限制,任何有效的分支名稱都將有效。
更新其他系統
當您變更為不同的預設分支時,工作流程的其他部分可能會受到影響。 規劃變更時,您必須將這些元件納入考慮。
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
都會使指示更加難以理解。
鏡像管線
注意
這些指示不是傻瓜證明,您的存放庫設定可能需要額外的變更,例如鬆散許可權和原則。
警告
如果在這個管線執行之前更新舊和新的預設分支,則管線將無法鏡像變更。 有人必須手動 將舊的預設分支合併 到新的預設分支,才能再次自動執行。
針對所有現有的 CI 組建,更新它們以 針對新的預設分支觸發 ,而不是舊分支。
將組建身分 識別「參與」 許可權授與存放庫。 流覽至 Project 設定> Repositories>(您的存放庫)>許可權。 最多可能會有兩個身分識別,一個用於專案集合建置服務,另一個用於專案建置服務。 請確定 [參與] 權限顯示 [允許]。
如果新的預設分支有分支原則,則也會在推送許可權時授與組建身分識別略過原則。 此許可權是安全性風險,因為惡意使用者可能會製作管線,以將程式代碼潛入專案中的存放庫。 不再需要鏡像時, 請務必 移除此許可權。
在新的預設分支中,
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
- 在精靈中選擇 [Azure Repos Git] 和 [現有的 Azure Pipelines YAML 檔案] 來建立新的管線。
mirror.yml
選擇您在上一個步驟中新增的檔案。 儲存並執行管線。
疑難排解
每次有推送至 或 至 master
main
時,此管線都會執行。
只要新的認可不會同時抵達這兩個分支,就會讓它們保持同步。
如果管線開始失敗,並出現錯誤訊息,例如「更新 因為推送的分支提示位於其遠端後方」,則有人必須手動將舊分支合併到新的分支。
- 將存放庫複製到
cd
其目錄中。 - 使用 查看新的預設分支
git checkout main
(如果main
是新的預設分支)。 - 建立新的分支,以整合兩個分支與
git checkout -b integrate
。 - 將舊的預設分支與
git merge master
合併(如果master
是舊的預設分支)。 - 推送新的分支,然後開啟並完成提取要求到新的預設分支。
- 然後鏡像管線應該負責將合併認可鏡像回到舊的預設值。