分支原則和設定

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

分支原則可協助小組保護其重要的 開發分支 。 分支原則會針對小組強制執行程式碼品質和變更管理方面的標準。 本文說明如何設定和管理分支原則。 如需所有存放庫和分支原則和設定的概觀,請參閱 Git 存放庫設定和原則

已設定必要原則的分支無法刪除,而且需要所有變更的提取要求(PR)。

必要條件

  • 若要設定分支原則,您必須是 Project 管理員 istrators 安全組的成員,或具有存放庫層級的編輯原則許可權。 如需詳細資訊,請參閱 設定 Git 存放庫許可權

  • 如果您想要使用 Azure DevOps CLI az repos policy 命令來管理分支原則,請遵循開始使用 Azure DevOps CLI 中的步驟。

  • 若要設定分支原則,您必須是 Project 管理員 istrators 安全組的成員,或具有存放庫層級的編輯原則許可權。 如需詳細資訊,請參閱 設定 Git 存放庫許可權

設定分支原則

若要管理分支原則,請選取 [存放庫>分支] 以在入口網站中開啟 [分支] 頁面。

顯示 [分支] 功能表項的螢幕快照。

您也可以使用 Project 設定> Repository>Policies Branch Policies>><Branch Name 來取得分支原則設定。>

具有原則的分支會顯示原則圖示。 您可以選取圖示,直接移至分支的原則設定。

若要設定分支原則,請找出您想要管理的分支。 您可以在右上方的 [搜尋分支名稱 ] 方塊中瀏覽清單或搜尋您的分支。

選取分支旁的 [其他選項 ] 圖示,然後從操作功能表中選取 [分支 原則]。

顯示從操作功能表開啟分支原則的螢幕快照。

在頁面中找出您的分支。 您可以瀏覽清單,或使用右上方的 [搜尋所有分支] 方塊來搜尋分支

顯示 [分支] 頁面的螢幕快照。

選取 ... 按鈕。 從捷徑功能表中選取 [分支原則]

顯示從操作功能表開啟分支原則的螢幕快照。

在分支的設定頁面上設定原則。 如需每個原則類型的描述和指示,請參閱下列各節。

在 [原則] 頁面中設定您的原則。 如需每個原則類型的描述,請參閱下列各節。 選取 [ 儲存變更 ] 以套用新的原則設定。

顯示 [原則] 索引標籤的螢幕快照。

需要最少數目的檢閱者

程式代碼檢閱對於軟體開發專案很重要。 若要確保小組檢閱和核准PR,您可以從最少的檢閱者數目要求核准。 基本原則要求指定數目的檢閱者核准程序代碼,且不會拒絕。

若要設定原則,請在 [分支原則] 底下,將 [需要最少數目的檢閱者] 設定為 [開啟]。 輸入必要的檢閱者數目,然後選取下列任一選項:

顯示啟用 [需要程式代碼檢閱] 原則的螢幕快照。

  • 選取 [允許要求者核准自己的變更 ],以允許PR的建立者對其核准進行投票。 否則,建立者仍然可以投票 核准 PR,但其投票不會計入最少的檢閱者數目。

  • 選取 [禁止最新的推播者核准自己的變更 ],以強制執行職責隔離。 根據預設,來源分支上具有推送許可權的任何人都可以新增認可和投票給PR核准。 選取此選項表示最新的推播者投票不算數,即使他們通常可以核准自己的變更也一樣。

  • 即使某些檢閱者投票等候或拒絕允許PR完成,即使某些檢閱者投票反對核准,仍選取 [允許完成]。 檢閱者數目下限仍必須核准。

  • 在 [推送新變更時] 底下
    • 選取 [在上次反覆 專案上至少需要一個核准],以要求至少一個核准投票才能變更最後一個來源分支。
    • 選取 [ 重設所有核准投票](不會重設投票以拒絕或等候) 移除所有核准投票,但每當來源分支變更時,請保留投票以拒絕或等候。
    • 選取 [ 重設所有程序代碼檢閱者投票 ],以在來源分支變更時移除所有檢閱者投票,包括要核准、拒絕或等候的投票。
  • 在 [推送新變更時] 底下
    • 針對最後一個來源分支變更,選取 [每次反復 專案至少需要一個核准] 來核准。 使用者核准不會計入該使用者所推送的任何先前未核准反覆專案。 因此,另一位用戶必須完成最後一次反覆專案的其他核准。 Azure DevOps Server 2022.1 和更新版本中至少有一個反覆 專案需要一個核准。
    • 選取 [在上次反覆 專案上至少需要一個核准],以要求至少一個核准投票才能變更最後一個來源分支。
    • 選取 [ 重設所有核准投票](不會重設投票以拒絕或等候) 移除所有核准投票,但每當來源分支變更時,請保留投票以拒絕或等候。
    • 選取 [ 重設所有程序代碼檢閱者投票 ],以在來源分支變更時移除所有檢閱者投票,包括要核准、拒絕或等候的投票。

核取 [需要程序代碼檢閱] 方塊

  • 如果未選取要求者可以核准自己的變更,提取要求的建立者仍然可以對其提取要求進行核准,但他們的投票不會計入檢閱者數目下限。
  • 如果有任何檢閱者拒絕變更,除非您選取 [允許完成],否則提取要求無法完成,即使某些檢閱者投票等候或拒絕
  • 當新的變更推送至來源分支時,您可以重設程式代碼檢閱者投票。 選取 [ 重設程序代碼檢閱者投票時有新的變更]。

如果所有其他原則都通過,建立者可以在所需的檢閱者核准時完成PR。

檢查連結的工作專案

針對 工作專案管理追蹤,您可以要求PR與工作專案之間的關聯。 連結工作專案可提供更多變更內容,並確保更新會經過您的工作專案追蹤程式。

若要設定原則,請在 [分支原則] 底下,將 [檢查連結的工作專案] 設定為 [開啟]。 此設定需要將工作項目連結至 PR,才能合併 PR。 設定 [選擇性] 可在沒有連結的工作項目時發出警告,但允許完成提取要求。

需要提取要求中連結工作項目的螢幕快照。

需要提取要求中的連結工作專案

檢查批註解析

檢查批注解析原則會檢查是否已解決所有PR批注。

將 [檢查批注解析] 設定為 [開啟] 來設定分支的批注解析原則。 然後選取 [ 必要 ] 或 [選擇性] 原則。

檢查批註解析

如需使用提取要求批注的詳細資訊,請參閱 檢閱提取要求

選取 [檢查批注解析] 來設定分支的批注解析原則

檢查批註解析

如需使用提取要求批注的詳細資訊,請參閱 檢閱提取要求

限制合併類型

Azure Repos 有數個合併策略,根據預設,所有合併策略都是允許的。 您可以強制執行 PR 完成的合併策略,以維護一致的分支歷程記錄。

將 [限制合併類型] 設定[開啟] 以限制存放庫中允許的合併類型。

限制合併類型

  • 基本合併 (沒有快速轉寄) 會在父系為目標和來源分支的目標中建立合併認可。
  • Squash 合併 會在目標分支中建立具有來源分支變更之單一認可的線性歷程記錄。 深入瞭解壁球合併 ,以及它如何影響分支歷程記錄。
  • 重新基底和快速轉寄 會建立線性歷程記錄,方法是將來源認可重新執行至目標分支,而不需要合併認可。
  • 使用合併認可重新執行來源認可 至目標,並建立合併認可。

注意

此功能適用於 Azure DevOps Server 2020 和更新版本。

強制執行合併策略

在提取要求完成時強制執行合併策略,以維護一致的分支歷程記錄。 選取 [ 強制執行合併策略 ],然後挑選一個選項,要求使用該策略合併提取要求。

設定合併需求

  • 沒有快速向前合併 - 此選項會在提取要求關閉並在目標分支中建立合併認可時合併來源分支的認可歷程記錄。
  • Squash 合併 - 使用 squash 合併 完成所有提取要求,並在目標分支中建立單一認可,並具有來源分支的變更。 深入瞭解壁球合併 ,以及它如何影響您的分支歷程記錄。

組建驗證

您可以設定原則,要求PR變更才能順利建置,才能完成PR。 建置原則可減少中斷,並讓您的測試結果保持通過。 即使您在 開發分支上使用持續整合 (CI)來提早捕捉問題,建置原則仍可協助。

當建立新的PR或變更推送至以分支為目標的現有PR時,組建驗證原則會將新組建排入佇列。 建置原則會評估組建結果,以判斷是否可以完成PR。

重要

指定組建驗證原則之前,您必須有組建管線。 如果您沒有管線,請參閱 建立組建管線。 選擇符合專案類型的組建類型。

若要新增組建驗證原則

  1. +選取 [建置驗證] 旁的按鈕。

    顯示 [建置驗證] 旁 [新增] 按鈕的螢幕快照。

  2. 填寫 [ 設定組建原則 ] 表單:

    建置原則設定

    • 選取 [建置 管線]。

    • 選擇性地設定 路徑篩選條件。 深入瞭解分支原則中的路徑篩選

    • 在 [觸發程式] 底下,選取 [自動] 或 [每當來源分支更新時][手動]。

    • 在 [原則需求] 底下,選取 [必要] 或 [選擇性]。 如果您選擇 [ 必要],組建必須順利完成才能完成 PR。 選擇 [ 選擇性 ] 提供建置失敗的通知,但仍允許PR完成。

    • 設定組建到期,以確保受保護分支的更新不會中斷開啟PR的變更。

      • 在更新分支名稱>時<立即:此選項會將每當更新分支時PR建置原則狀態設定為失敗,並重新排入組建佇列。 此設定可確保即使受保護的分支變更,PR 變更也會成功建置。

        此選項最適合重要分支很少變更的小組。 在忙碌開發分支中工作的小組可能會發現每次分支更新時,等候組建會造成干擾。

      • 更新<分支名稱>的 n> 小時之後<:如果通過的組建比您輸入的臨界值還舊,則當受保護的分支更新時,此選項會過期目前的原則狀態。 此選項是受保護分支更新時一律或永遠不需要組建之間的妥協。 當您的受保護分支經常更新時,此選項可減少組建數目。

      • 永不:更新 受保護分支不會變更原則狀態。 此值會減少組建數目,但在完成最近尚未更新的PR時,可能會導致問題。

    • 輸入此組建原則的選擇性 顯示名稱 。 此名稱會 識別 [分支原則 ] 頁面上的原則。 如果您未指定顯示名稱,原則會使用組建管線名稱。

  3. 選取 [儲存]。

當PR擁有者推送成功建置的變更時,原則狀態會更新。

如果您在更新分支名稱時<立即有 ,或如果分支名稱>>已更新組建原則,<>則<原則狀態會在受保護的分支更新時更新,如果先前的組建不再有效,則此原則狀態會更新。

注意

此功能適用於 Azure DevOps Server 2020 和更新版本。

設定原則,要求提取要求中的變更,才能使用受保護的分支成功建置,才能完成提取要求。 建置原則可減少中斷,並讓您的測試結果保持通過。 即使您在 開發分支上使用持續整合 (CI)來提早捕捉問題,建置原則仍可協助。

如果啟用組建驗證原則,則會在建立新的提取要求時將新的組建排入佇列,或將變更推送至以分支為目標的現有提取要求。 然後,建置原則會評估組建的結果,以判斷是否可以完成提取要求。

重要

指定組建驗證原則之前,您必須有組建定義。 如果您沒有組建定義,請參閱 建立組建定義 ,然後選擇符合專案類型的組建類型。

新增建置原則

選擇 [新增建置原則],然後在 [新增建置原則] 中設定您的選項。

建置原則設定

  1. 選取 [建置 定義]。

  2. 選擇 [觸發程式] 的類型。 選取 [自動] 或 [ 每當來源分支更新時][手動]。

  3. 選取 [原則 需求]。 如果您選擇 [ 必要],組建必須成功完成才能完成提取要求。 選擇 [ 選擇性 ] 提供建置失敗的通知,但仍允許提取要求完成。

  4. 設定組建到期日,以確保受保護分支的更新不會中斷開啟提取要求的變更。

    • 更新時branch name立即:此選項會將提取要求中的建置原則狀態設定為在受保護分支更新時失敗 重新排入組建佇列以重新整理組建狀態。 此設定可確保即使受保護的分支變更,提取要求中的變更也會成功建置。 此選項最適合具有較少變更量重要分支的小組。 在忙碌開發分支中工作的小組可能會發現,在每次更新受保護的分支時,等候組建完成可能會造成干擾。
    • n更新branch name數小時后:如果通過的組建比輸入的臨界值還舊,此選項會在受保護的分支更新時過期目前的原則狀態。 此選項在受保護分支更新時一律要求組建,且永遠不需要組建之間有妥協。 當您的受保護分支經常更新時,這個選擇非常適合減少組建數目。
    • 永不:更新 受保護分支不會變更原則狀態。 此值會減少分支的組建數目。 關閉最近尚未更新的提取要求時,可能會造成問題。
  5. 輸入此組建原則的選擇性 顯示名稱 。 此名稱會 識別 [分支原則 ] 頁面上的原則。 如果您未指定顯示名稱,原則會使用組建定義名稱。

  6. 選取 [儲存]。

當擁有者成功推送建置的變更時,原則狀態會更新。 如果您已立即更新branch name,或branch namen選擇更新組建原則的後小時,則原則狀態會在最新組建不再有效時更新受保護的分支時更新。

狀態檢查

外部服務可以使用 PR 狀態 API ,將詳細狀態張貼到您的 PR。 其他服務的分支原則可讓這些第三方服務參與PR工作流程,並建立原則需求。

要求外部服務核准

如需設定此原則的指示,請參閱 設定外部服務的分支原則

需要外部服務的核准

外部服務可以使用 PR 狀態 API ,將詳細狀態張貼到您的 PR。 其他服務的分支原則可讓第三方服務參與PR工作流程,並建立原則需求。

要求外部服務核准

如需設定此原則的指示,請參閱 設定外部服務的分支原則

自動包含程式代碼檢閱者

您可以自動新增檢閱者來提取要求,以變更特定目錄和檔案中的檔案,或提取存放庫中的所有提取要求。

  1. 選取 [+自動包含的檢閱者] 旁的按鈕。

    顯示 [新增必要檢閱者] 的螢幕快照。

  2. 填寫 [ 新增檢閱者原則 ] 畫面。

    顯示 [新增檢閱者原則] 畫面的螢幕快照。

    • 將人員和群組新增至檢 閱者

    • 如果您想要自動新增檢閱者,但不需要核准才能完成提取要求,請 選取 [選擇性 ]。

      或者,如果提取要求無法完成,請選取 [必要 ],直到:

      • 以檢閱者身分新增的每個人員都會核准變更。
      • 在檢閱者身分新增的每個群組中,至少有一個人核准變更。
      • 如果只需要一個群組,您指定核准變更的成員數目下限。
    • 指定需要自動包含檢閱者的檔案和資料夾。 將此欄位保留空白,以要求檢閱者取得分支中的所有提取要求。

    • 如果提取要求擁有者可以投票核准自己的提取要求,以滿足此原則,請 選取 [允許要求者核准自己的變更 ]。

    • 您可以指定 出現在提取要求中的活動摘要訊息

  3. 選取 [儲存]

注意

此功能適用於 Azure DevOps Server 2020 和更新版本。

選取存放庫中特定目錄和檔案的檢閱者。

輸入路徑和必要的檢閱者

這些檢閱者會自動新增至提取要求,這些要求會沿著這些路徑變更檔案。 您也可以指定 活動摘要訊息

新增自動檢閱者

如果您選取 [ 必要],則提取要求必須等到下列時間才能完成:

  • 每位新增為路徑檢閱者的用戶都會核准變更。
  • 每個新增至路徑的群組中至少有一個人核准變更。
  • 針對新增至路徑的每個群組所指定的檢閱者數目會核准變更。

會自動新增必要的檢閱者

如果您想要自動新增檢閱者,但不需要核准才能完成提取要求,請 選取 [選擇性 ]。

您可以選取 [ 要求者可以核准自己的變更]。

當所有必要的檢閱者核准程序代碼時,您可以完成提取要求。

提取要求狀態顯示檢閱者已核准

略過分支原則

在某些情況下,您可能需要略過原則需求。 略過許可權可讓您直接將變更推送至分支,或完成不符合分支原則的提取要求。 您可以將略過許可權授與使用者或群組。 您可以將略過許可權的範圍設定為整個專案、存放庫或單一分支。

兩個許可權可讓使用者以不同的方式略過分支原則:

  • 完成提取要求 時略過原則僅適用於提取要求完成。 即使提取要求不符合原則,具有此許可權的使用者仍可完成提取要求。

  • 在推送 套用至本機存放庫的推送和網路上所做的編輯時略過原則。 具有此許可權的使用者可以直接將變更推送至受保護的分支,而不需要符合原則需求。

顯示略過原則強制執行許可權的螢幕快照。

如需管理這些許可權的詳細資訊,請參閱 Git 許可權

在 TFS 2015 到 TFS 2018 Update 2 中, 豁免原則強制執行 許可權可讓具有此許可權的使用者執行下列動作:

  • 完成提取要求時,選擇加入覆寫原則並完成提取要求,即使目前的分支原則集未滿足也一樣。
  • 即使該分支已設定分支原則,仍直接推送至分支。 請注意,當具有此許可權的用戶進行會覆寫分支原則的推送時,推送會自動略過沒有選擇加入步驟或警告的分支原則。

重要

授與略過原則的能力時請小心,特別是在存放庫和專案層級。 原則是安全且相容的原始程式碼管理的基石。

路徑篩選

數個分支原則提供路徑篩選。 如果設定路徑篩選條件,原則只會套用至符合路徑篩選條件的檔案。 將此欄位保留空白表示原則會套用至分支中的所有檔案。

您可以指定絕對路徑(路徑必須以 / 或通配符開頭)和通配符。 範例:

  • /WebApp/Models/Data.cs
  • /WebApp/*
  • */Models/Data.cs
  • *.cs

您可以使用 做為分隔符來指定多個路徑 ; 。 範例:

  • /WebApp/Models/Data.cs;/ClientApp/Models/Data.cs

如果其他路徑會包含,則會排除前面加上 ! 的路徑。 範例:

  • /WebApp/*;!/WebApp/Tests/* 包含中 /WebApp 檔案以外的所有檔案 /WebApp/Tests
  • !/WebApp/Tests/* 不指定任何檔案,因為第一次未包含任何檔案

篩選的順序相當重要。 篩選條件會由左至右套用。

問與答

我可以將變更直接推送至具有分支原則的分支嗎?

除非您有略過分支原則的許可權,否則您無法將變更直接推送至具有必要分支原則分支。 這些分支的變更只能透過 提取要求進行。 如果沒有必要的分支原則,您可以直接將變更推送至具有 選擇性 分支原則的分支。

什麼是自動完成?

將要求提取至已設定分支原則的分支,具有 [ 設定自動完成 ] 按鈕。 選取此選項即可 在完成所有原則後自動完成 提取要求。 當您不預期變更發生任何問題時,自動完成會很有用。

何時檢查分支原則條件?

提取要求擁有者推送變更和檢閱者投票時,分支原則會在伺服器上重新評估。 如果原則觸發組建,組建狀態會設定為等候組建完成為止。

我可以在分支原則中使用 XAML 組建定義嗎?

否,您無法在分支原則中使用 XAML 組建定義。

我可以使用哪些通配符給必要的程式代碼檢閱者?

單一星號 * 會比對任意數目的字元,包括正斜 / 線和反斜線 \。 問號 ? 符合任何單一字元。

範例:

  • *.sql會比對所有擴展名為 .sql 的檔案。
  • /ConsoleApplication/* 會比對名為 ConsoleApplication 資料夾下的所有檔案。
  • /.gitattributes比對存放庫根目錄中的 .gitattributes 檔案。
  • */.gitignore 會比對存放庫中的任何 .gitignore 檔案。

必要的程式代碼檢閱者路徑是否區分大小寫?

否,分支原則不會區分大小寫。

如何將多個用戶設定為必要的檢閱者,但只需要其中一個使用者核准?

您可以將 使用者新增至群組,然後將群組新增為檢閱者。 然後,群組的任何成員都可以核准以符合原則需求。

我有略過原則許可權。 為什麼我仍然會在提取要求狀態中看到原則失敗?

一律會評估已設定的原則以進行提取要求變更。 對於具有略過原則許可權的使用者,報告的原則狀態僅為諮詢。 如果具有略過許可權的使用者核准,失敗狀態不會封鎖提取要求完成。

為什麼「允許要求者核准自己的變更已設定」時,無法完成自己的提取要求?

[需要最少數目的檢閱者] 原則和 [自動包含的檢閱者] 原則都有 [允許要求者核准自己的變更] 選項。 在每個原則中,此設定僅適用於該原則。 此設定不會影響其他原則。

例如,您的提取要求已設定下列原則:

  • 需要至少一個檢閱者 數目的檢閱者。
  • 自動包含的檢閱者 會要求您或身為檢閱者的小組。
  • 自動包含的檢閱者允許要求者核准啟用自己的變更
  • 需要最少數目的檢閱者 沒有 [允許要求者核准自己的變更 ] 啟用。

在此情況下,您的核准會 滿足自動包含的檢閱者,但不需要 最少的檢閱者數目,因此您無法完成提取要求。

還有其他原則,例如禁止最新的推播者核准自己的變更,讓您無法核准自己的變更,即使已設定 [允許要求者核准自己的變更] 也一樣

當路徑篩選中的路徑不是使用 / 或通配符啟動時,會發生什麼事?

以 和 通配符開頭的路徑 / 不會有任何作用,且路徑篩選條件會評估為未指定該路徑。 這是因為這類路徑無法比對 / 絕對檔案路徑開頭。