相关文章推荐

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

分支策略可帮助团队保护其重要的开发 分支 。 这些策略强制实施团队的代码质量和更改管理标准。 本文介绍如何设置和管理分支策略。 有关所有存储库和分支策略和设置的概述,请参阅 Git 存储库设置和策略

无法删除配置了所需策略的分支,并且要求拉取请求 (PR) 所有更改。

  • 若要设置分支策略,您必须是项目管理员安全组的成员或具有存储库级 “编辑策略” 权限。 有关详细信息,请参阅 设置 Git 存储库权限

  • 如果要使用 Azure DevOps CLI az repos policy 命令来管理分支策略,请按照 Azure DevOps CLI 入门 中的步骤操作。

    若要列出项目中的所有策略,请使用 az repos policy list

    az repos policy list [--branch]
                         [--detect {false, true}]
                         [--org]
                         [--project]
                         [--query-examples]
                         [--repository-id]
                         [--subscription]
    org, organization
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需query-examples
    建议的 JMESPath 字符串。 可以复制其中一个查询,并将其粘贴到 --query 参数后,用双引号查看结果。 可以添加一个或多个位置关键字,以便建议基于这些关键字。
    repository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    以下命令返回 Fabrikam 存储库的 分支(ID d28cd374-e7f0-4b1f-ad60-f349f155d47c)中main生效的所有分支策略。 可以通过运行 az repos list获取存储库 ID。

    此示例使用以下默认配置: az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"

    az repos policy list --repository-id d28cd374-e7f0-4b1f-ad60-f349f155d47c --branch main --output table
    ID    Name                         Is Blocking    Is Enabled    Repository Id                         Branch
    ----  ---------------------------  -------------  ------------  ------------------------------------  ---------------
    3     Work item linking            False          True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    5     Minimum number of reviewers  True           True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    6     Comment requirements         False          True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    12    Required reviewers           True           False         d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    13    Required reviewers           False          True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    

    显示策略的详细信息

    若要显示任何策略的详细信息,请使用 az repos policy show

    az repos policy show --id
                         [--detect {false, true}]
                         [--org]
                         [--project]
                         [--query-examples]
                         [--subscription]
    org, organization
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需query-examples
    建议的 JMESPath 字符串。 可以复制其中一个查询,并将其粘贴到 --query 参数后,用双引号查看结果。 可以添加一个或多个位置关键字,以便建议基于这些关键字。
    subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    
  • 选择“ 允许请求者批准其自己的更改 ”,以允许 PR 的创建者对其批准进行投票。 否则,创建者仍然可以对 PR 进行 “批准” 投票,但他们的投票不会计入最小审阅者数。

  • 选择“ 禁止最近的推送程序批准其自己的更改 ”以强制实施职责分离。 默认情况下,对源分支具有推送权限的任何人都可以添加提交和对 PR 审批进行投票。 选择此选项意味着最近的推手的投票不算在内,即使他们通常可以批准自己的更改。

  • 选择允许完成,即使某些审阅者投票等待或拒绝允许 PR 完成,即使某些审阅者投票反对批准。 仍必须批准的最低审阅者数。

  • “推送新更改时”下:

  • 选择 “在最后一次迭代中至少需要一个审批 ”,以要求对最后一个源分支更改进行至少一次审批投票。
  • 选择“ 重置所有批准投票 (不重置投票以拒绝或等待) 删除所有批准投票,但每当源分支更改时,保留投票以拒绝或等待,
  • 选择“ 重置所有代码审阅者投票 ”,以在源分支更改时删除所有审阅者投票,包括批准、拒绝或等待投票。
  • 如果未选择请求者可以批准自己的更改,则拉取请求的创建者仍然可以对其拉取请求投票批准,但他们的投票不会计入最小审阅者数
  • 如果任何审阅者拒绝更改,则拉取请求无法完成,除非你选择“允许完成”,即使某些审阅者投票等待或拒绝
  • 在将新更改推送到源分支时,可以重置代码审阅者投票。 有新更改时,选择“重置代码审阅者投票”。
  • 如果所有其他策略都通过,则创建者可以在所需数量的审阅者批准时完成 PR。

    可以使用 az repos policy approver-count 管理拉取请求所需的审批者计数

    创建审批者计数策略

    若要创建审批者计数策略,请使用 az repos policy approver-count create

    az repos policy approver-count create --allow-downvotes {false, true}
                                          --blocking {false, true}
                                          --branch
                                          --creator-vote-counts {false, true}
                                          --enabled {false, true}
                                          --minimum-approver-count
                                          --repository-id
                                          --reset-on-source-push {false, true}
                                          [--branch-match-type {exact, prefix}]
                                          [--detect {false, true}]
                                          [--org]
                                          [--project]
                                          [--subscription]
    repository-id
    存储库的 ID,用于按完全匹配筛选结果。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345。 “必需”。
    reset-on-source-push
    将更改推送到源时重置投票。 接受的值: falsetrue。 “必需”。
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git config 进行选取,则是必需的。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git config 进行选取,则是必需的subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    以下示例将 Fabrikam 存储库分支中main拉取请求的最小所需审批2数设置为 。 该策略允许下票,这意味着拉取请求可以完成,即使某些审阅者投票不批准,只要最小人数投票批准。 推送到源分支不会重置投票。 该策略还允许拉取请求创建者批准自己的拉取请求。

    此示例使用默认配置 az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"

    az repos policy approver-count create --allow-downvotes true --blocking true --branch main --creator-vote-counts true --enabled true --minimum-approver-count 2 --repository-id d28cd374-e7f0-4b1f-ad60-f349f155d47c --reset-on-source-push false --output table ID Name Is Blocking Is Enabled Repository Id Branch ---- --------------------------- ------------- ------------ ------------------------------------ --------------- 27 Minimum number of reviewers True True d28cd374-e7f0-4b1f-ad60-f349f155d47c refs/heads/main

    更新审批者计数策略

    若要更新审批者计数策略,请使用 az repos policy approver-count update

    az repos policy approver-count update --id
                                          [--allow-downvotes {false, true}]
                                          [--blocking {false, true}]
                                          [--branch]
                                          [--branch-match-type {exact, prefix}]
                                          [--creator-vote-counts {false, true}]
                                          [--detect {false, true}]
                                          [--enabled {false, true}]
                                          [--minimum-approver-count]
                                          [--org]
                                          [--project]
                                          [--repository-id]
                                          [--reset-on-source-push {false, true}]
                                          [--subscription]
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactcreator-vote-counts
    计算创建者的投票。 接受的值: falsetruedetect
    自动检测组织。 接受的值: falsetrueenabled
    启用策略。 接受的值: falsetrueminimum-approver-count
    所需的最小审批者数。 例如:2。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git config 进行选取,则是必需的。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git config 进行选取,则是必需的repository-id
    存储库的 ID,用于按完全匹配筛选结果。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345reset-on-source-push
    将更改推送到源时重置投票。 接受的值: falsetruesubscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    创建工作项链接策略

    使用 az repos policy work-item-linking create 为存储库或分支创建工作项链接策略。

    az repos policy work-item-linking create --blocking {false, true}
                                             --branch
                                             --enabled {false, true}
                                             --repository-id
                                             [--branch-match-type {exact, prefix}]
                                             [--detect {false, true}]
                                             [--org]
                                             [--project]
                                             [--subscription]
    repository-id
    存储库的 ID,用于按完全匹配筛选结果。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git config 进行选取,则是必需的。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git config 进行选取,则是必需的subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    更新工作项链接策略

    使用 az repos policy work-item-linking update 更新存储库或一个或多个分支的工作项链接策略。

    az repos policy work-item-linking update --id
                                             [--blocking {false, true}]
                                             [--branch]
                                             [--branch-match-type {exact, prefix}]
                                             [--detect {false, true}]
                                             [--enabled {false, true}]
                                             [--org]
                                             [--project]
                                             [--repository-id]
                                             [--subscription]
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrueenabled
    启用策略。 接受的值: falsetrueminimum-approver-count
    所需的最小审批者数。 例如:2。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git config 进行选取,则是必需的。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git config 进行选取,则是必需的repository-id
    存储库的 ID,用于按完全匹配筛选结果。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    以下示例更新 Fabrikam 存储库分支main的策略 ID3,使其启用但可选。 该示例使用默认配置 az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"

    >az repos policy work-item-linking update --id 3 --blocking false --branch main --enabled true --repository-id d28cd374-e7f0-4b1f-ad60-f349f155d47c --output table
    ID    Name               Is Blocking    Is Enabled    Repository Id                         Branch
    ----  -----------------  -------------  ------------  ------------------------------------  ---------------
    3     Work item linking  False          True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    

    本地Azure DevOps Server不支持 Azure DevOps CLI 命令。

    可以使用 Azure DevOps CLI az repos policy comment-required 来设置和更新注释解析策略。

    创建批注解析策略

    若要创建注释解析策略,请使用 az repos policy comment-required create

    az repos policy comment-required create --blocking {false, true}
                                            --branch
                                            --enabled {false, true}
                                            --repository-id
                                            [--branch-match-type {exact, prefix}]
                                            [--detect {false, true}]
                                            [--org]
                                            [--project]
                                            [--subscription]
    repository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345。 “必需”。
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    更新注释解决策略

    若要更新注释解析策略,请使用 az repos policy comment-required update

    az repos policy comment-required update --id
                                            [--blocking {false, true}]
                                            [--branch]
                                            [--branch-match-type {exact, prefix}]
                                            [--detect {false, true}]
                                            [--enabled {false, true}]
                                            [--org]
                                            [--project]
                                            [--repository-id]
                                            [--subscription]
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrueenabled
    启用策略。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需repository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    以下示例更新要阻止的 Fabrikam 存储库分支中的main注释解析策略 ID6。 必须先解析注释,然后拉取请求才能合并。 此示例使用默认配置 az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"

    az repos policy comment-required update --id 6 --blocking true --output table
    ID    Name                  Is Blocking    Is Enabled    Repository Id                         Branch
    ----  --------------------  -------------  ------------  ------------------------------------  ---------------
    6     Comment requirements  True           True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    

    本地Azure DevOps Server不支持 Azure DevOps CLI 命令。

  • 基本合并 (没有快进) 在父级为目标和源分支的目标中创建合并提交。
  • 压缩合并 在目标分支中创建一个线性历史记录,其中包含来自源分支的更改的单个提交。 详细了解 squash 合并 及其如何影响分支历史记录。
  • 变基和快进 通过在不合并提交的情况下将源提交重播到目标分支来创建线性历史记录。
  • 使用合并提交 重播源提交到目标,并创建合并提交。
  • 可以使用 Azure DevOps CLI az repos policy merge-strategy 设置和更新合并策略。

    创建合并策略策略

    使用 az repos policy merge-strategy create 创建合并策略。

    az repos policy merge-strategy create --blocking {false, true}
                                          --branch
                                          --enabled {false, true}
                                          --repository-id
                                          [--allow-no-fast-forward {false, true}]
                                          [--allow-rebase {false, true}]
                                          [--allow-rebase-merge {false, true}]
                                          [--allow-squash {false, true}]
                                          [--branch-match-type {exact, prefix}]
                                          [--detect {false, true}]
                                          [--org]
                                          [--project]
                                          [--subscription]
                                          [--use-squash-merge {false, true}]
    repository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345。 “必需”。
    allow-no-fast-forward
    没有快进的基本合并。 保留非线性历史记录,完全与开发过程中发生的情况一样。 接受的值: falsetrueallow-rebase
    重定基和快进。 通过将源分支提交重播到目标上而不进行合并提交来创建线性历史记录。 接受的值: falsetrueallow-rebase-merge
    通过合并提交来调整基。 通过将源分支提交重播到目标上,然后创建合并提交来创建半线性历史记录。 接受的值: falsetrueallow-squash
    压缩合并。 通过将源分支提交压缩为目标分支上的单个新提交来创建线性历史记录。 接受的值: falsetruebranch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    use-squash-merge
    始终压缩合并。 此选项不适用于其他合并类型。 接受的值: falsetrue

    注意use-squash-merge 已弃用,将在将来的版本中删除。 请改用 --allow-squash

    以下示例为 Fabrikam 存储库的 main 分支中的拉取请求设置所需的合并策略,以允许 squash 合并。 此示例使用默认配置 az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"

    az repos policy merge-strategy create --allow-squash true --blocking true --branch main --enabled true --repository-id d28cd374-e7f0-4b1f-ad60-f349f155d47c --output table
    ID    Name                      Is Blocking    Is Enabled    Repository Id                         Branch
    ----  ------------------------  -------------  ------------  ------------------------------------  ---------------
    29    Require a merge strategy  True           True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    

    更新合并策略策略

    使用 az repos policy merge-strategy update 更新合并策略。

    az repos policy merge-strategy update --id
                                          [--allow-no-fast-forward {false, true}]
                                          [--allow-rebase {false, true}]
                                          [--allow-rebase-merge {false, true}]
                                          [--allow-squash {false, true}]
                                          [--blocking {false, true}]
                                          [--branch]
                                          [--branch-match-type {exact, prefix}]
                                          [--detect {false, true}]
                                          [--enabled {false, true}]
                                          [--org]
                                          [--project]
                                          [--repository-id]
                                          [--subscription]
                                          [--use-squash-merge {false, true}]
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrueenabled
    启用策略。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/project, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需repository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    use-squash-merge
    是否始终压缩合并。 此选项不适用于其他合并类型。 接受的值: falsetrue

    可以设置一个策略,要求 PR 更改才能成功完成 PR 才能完成。 生成策略可减少中断并保持测试结果通过。 即使你在开发分支上使用 持续集成 (CI) ,生成策略也有助于及早发现问题。

    创建新的 PR 或将更改推送到面向分支的现有 PR 时,生成验证策略会将新生成排队。 生成策略评估生成结果,以确定是否可以完成 PR。

    在指定生成验证策略之前,必须具有生成管道。 如果没有管道,请参阅 创建生成管道。 选择与项目类型匹配的生成类型。

  • “触发器”下,选择“ 每当源分支) 更新时自动 (” 或“ 手动”。

  • “策略要求”下,选择“ 必需 ”或“ 可选”。 如果选择“ 必需”,则生成必须成功完成才能完成 PR。 选择 “可选 ”以提供生成失败通知,但仍允许 PR 完成。

  • 设置内部版本过期,确保对受保护分支的更新不会中断打开的 PR 的更改。

  • 更新分支名称>时<立即更新:此选项将每当更新分支时,将 PR 生成策略状态设置为失败,并重新排队生成。 此设置可确保 PR 更改成功生成,即使受保护分支更改也是如此。

    此选项最适合重要分支几乎没有变化的团队。 在繁忙的开发分支中工作的团队可能会发现每次更新分支时等待生成会中断。

  • 如果<分支名称>已更新,则 n> 小时后<:如果通过的内部版本早于输入的阈值,则当受保护分支更新时,此选项会使当前策略状态过期。 此选项是受保护分支更新时始终或从不需要生成之间的折衷方案。 当受保护分支频繁更新时,此选项可以减少生成数。

  • 从不:汇报受保护分支不会更改策略状态。 此值可减少生成数,但在完成最近尚未更新的 PR 时可能会导致问题。

  • 输入此生成策略的可选 显示名称 。 此名称标识“分支策略”页上 的策略 。 如果未指定显示名称,则策略将使用生成管道名称。

  • 选择“保存”。

    当 PR 所有者成功推送该生成的更改时,策略状态会更新。

    如果有一个 “在更新分支名称>时<立即” 或 “n> 小时后<” (如果<分支名称>已更新生成策略),则策略状态在受保护分支更新时更新(如果以前的生成不再有效)。

    此功能适用于 Azure DevOps Server 2020 及更高版本。

    可以使用 Azure DevOps CLI az repos policy build 设置和更新生成验证策略。

    创建生成验证策略

    使用 az repos policy build create 创建生成验证策略。

    az repos policy build create --blocking {false, true}
                                 --branch
                                 --build-definition-id
                                 --display-name
                                 --enabled {false, true}
                                 --manual-queue-only {false, true}
                                 --queue-on-source-update-only {false, true}
                                 --repository-id
                                 --valid-duration
                                 [--branch-match-type {exact, prefix}]
                                 [--detect {false, true}]
                                 [--org]
                                 [--path-filter]
                                 [--project]
                                 [--subscription]
    repository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345。 “必需”。
    valid-duration
    策略有效期(以分钟为单位)。 注意:valid-duration必须介于零到一年之间,并且 当 为 false--queue-on-source-update-only必须为零。 “必需”。
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/path-filter
    应用策略的路径 () 。 支持绝对路径、通配符和由 分隔的 ;多个路径。 示例: /WebApp/Models/Data.cs/WebApp/**.cs,/WebApp/Models/Data.cs;ClientApp/Models/Data.csproject, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    以下示例为 Fabrikam 存储库的 分支中的 main 拉取请求设置所需的生成策略。 该策略要求成功生成生成定义 ID 1,并且仅允许手动生成队列。 此示例使用默认配置 az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"

    az repos policy build create --blocking true --branch main --build-definition-id 1 --display-name build-policy --enabled true --manual-queue-only true --queue-on-source-update-only false --repository-id d28cd374-e7f0-4b1f-ad60-f349f155d47c --valid-duration 0 --output table
    ID    Name          Is Blocking    Is Enabled    Repository Id                         Branch
    ----  ------------  -------------  ------------  ------------------------------------  ---------------
    31    build-policy  True           True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    

    更新生成验证策略

    使用 az repos policy build update 更新生成验证策略。

    az repos policy build update --id
                                 [--blocking {false, true}]
                                 [--branch]
                                 [--branch-match-type {exact, prefix}]
                                 [--build-definition-id]
                                 [--detect {false, true}]
                                 [--display-name]
                                 [--enabled {false, true}]
                                 [--manual-queue-only {false, true}]
                                 [--org]
                                 [--path-filter]
                                 [--project]
                                 [--queue-on-source-update-only {false, true}]
                                 [--repository-id]
                                 [--subscription]
                                 [--valid-duration]
    branch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactbuild-definition-id
    生成定义 ID。
    detect
    自动检测组织。 接受的值: falsetruedisplay-name
    此生成策略的显示名称,用于标识策略。 例如:Manual queue policyenabled
    启用策略。 接受的值: falsetruemanual-queue-only
    是否只允许手动队列生成。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/path-filter
    应用策略的路径 () 。 支持绝对路径、通配符和由 分隔的 ;多个路径。 示例: /WebApp/Models/Data.cs/WebApp/**.cs,/WebApp/Models/Data.cs;ClientApp/Models/Data.csproject, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需queue-on-source-update-only
    是否仅在源更新时对生成进行排队。 接受的值: falsetruerepository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    valid-duration
    策略有效期(以分钟为单位)。
    

    设置一个策略,要求更改拉取请求才能使用受保护分支成功生成,然后才能完成拉取请求。 生成策略可减少中断并保持测试结果通过。 即使你在开发分支上使用 持续集成 (CI) ,生成策略也有助于及早发现问题。

    如果启用了生成验证策略,则创建新的拉取请求时,或者将更改推送到面向分支的现有拉取请求时,新生成将排队。 然后,生成策略会评估生成结果,以确定拉取请求是否可以完成。

    在指定生成验证策略之前,必须具有生成定义。 如果没有,请参阅 创建生成定义 并选择与项目类型匹配的生成类型。

    选择 “添加生成策略 ”,并在 “添加生成策略”中配置选项。

  • 选择 “生成”定义

  • 选择 “触发器”的类型。 每当) 更新源分支时,选择“自动 (”或“ 手动”。

  • 选择 “策略要求”。 如果选择“ 必需”,则必须成功完成生成才能完成拉取请求。 选择 “可选 ”以提供生成失败通知,但仍允许拉取请求完成。

  • 设置内部版本过期,确保对受保护分支的更新不会中断打开的拉取请求的更改。

  • 更新时branch name立即更新:此选项将拉取请求中的生成策略状态设置为在更新受保护分支时失败。 重新排队生成以刷新生成状态。 此设置可确保即使受保护分支更改,拉取请求中的更改也能成功生成。 此选项最适合具有重要分支且更改量较低的团队。 在繁忙的开发分支中工作的团队可能会发现,每次更新受保护分支时,等待生成完成可能会造成干扰。
  • 几小时后n(如果branch name已更新):如果通过的内部版本早于输入的阈值,则当受保护分支更新时,此选项会使当前策略状态过期。 此选项是受保护分支更新时始终需要生成和从不需要生成之间的折衷方案。 当受保护分支频繁更新时,此选项非常适合减少生成数。
  • 从不:汇报受保护分支不会更改策略状态。 此值可减少分支的生成数。 关闭最近未更新的拉取请求时,可能会导致问题。
  • 输入此生成策略的可选 显示名称 。 此名称标识“分支策略”页上 的策略 。 如果未指定显示名称,则策略将使用生成定义名称。

  • 选择“保存”。

    当所有者成功推送该生成的更改时,策略状态将更新。 如果已选择更新生成策略,则具有“更新时branch name立即”或“几小时branch namen”生成策略,则当更新受保护分支时,如果最新版本不再有效,则策略状态会更新。

    外部服务可以使用 PR 状态 API 将详细状态发布到 PR。 其他服务的分支策略使这些第三方服务能够参与 PR 工作流并建立策略要求。

    有关配置此策略的说明,请参阅 为外部服务配置分支策略

    需要外部服务的批准

    外部服务可以使用 PR 状态 API 将详细状态发布到 PR。 其他服务的分支策略使这些第三方服务能够参与 PR 工作流并建立策略要求。

    有关配置此策略的说明,请参阅 为外部服务配置分支策略

    自动包含代码审阅者

    可以自动将审阅者添加到更改特定目录和文件中文件的拉取请求,或添加到存储库中的所有拉取请求。

  • 指定需要自动包含审阅者的文件和文件夹。 将此字段留空,要求审阅分支中的所有拉取请求。

  • 如果拉取请求所有者可以投票批准自己的拉取请求来满足此策略,请选择“允许请求者批准自己的更改”。

  • 可以指定显示在拉取请求中的活动源消息

  • 选择“保存”。

    可以使用 Azure DevOps CLI az repos policy required-reviewer 来设置和更新所需的审阅者策略。

    创建所需的审阅者策略

    使用 az repos policy required-reviewer create 创建所需的审阅者策略。

    az repos policy required-reviewer create --blocking {false, true}
                                             --branch
                                             --enabled {false, true}
                                             --message
                                             --repository-id
                                             --required-reviewer-ids
                                             [--branch-match-type {exact, prefix}]
                                             [--detect {false, true}]
                                             [--org]
                                             [--path-filter]
                                             [--project]
                                             [--subscription]
    repository-id
    要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345。 “必需”。
    required-reviewer-ids;分隔的审阅者电子邮件地址。 例如:john@contoso.com;alice@contoso.combranch-match-type
    branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect
    自动检测组织。 接受的值: falsetrue。
    Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/path-filter
    应用策略的路径 () 。 支持绝对路径、通配符和由 分隔的 ;多个路径。 示例: /WebApp/Models/Data.cs/WebApp/**.cs,/WebApp/Models/Data.cs;ClientApp/Models/Data.csproject, p
    项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需subscription
    订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。
    

    以下示例将 Jamal Hartnett 设置为 Fabrikam 存储库的 分支中的 main 拉取请求所需的审阅者。 此示例使用默认配置 az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"

    az repos policy required-reviewer create --blocking true --branch main --enabled true --message "Please review." --repository-id d28cd374-e7f0-4b1f-ad60-f349f155d47c --required-reviewer-ids fabrikamfiber4@hotmail.com --output table
    ID    Name                Is Blocking    Is Enabled    Repository Id                         Branch
    ----  ------------------  -------------  ------------  ------------------------------------  ---------------
    35    Required reviewers  True           True          d28cd374-e7f0-4b1f-ad60-f349f155d47c  refs/heads/main
    

    更新所需的审阅者策略

    使用 az repos policy required-reviewer update 更新所需的审阅者策略。

    az repos policy required-reviewer update --id [--blocking {false, true}] [--branch] [--branch-match-type {exact, prefix}] [--detect {false, true}] [--enabled {false, true}] [--message] [--org] [--path-filter] [--project] [--repository-id] [--required-reviewer-ids] [--subscription] branch-match-type branch使用 参数应用策略。 如果值为 exact,则策略将应用于与 参数完全匹配的 --branch 分支。 如果值为 prefix,则策略将应用于与 参数中的 --branch 前缀匹配的所有分支文件夹。 接受的值: exactprefix。 默认值:exactdetect 自动检测组织。 接受的值: falsetrueenabled 启用策略。 接受的值: falsetruemessage 拉取请求中显示的活动源消息。 Azure DevOps 组织 URL。 可以使用 配置默认组织 az devops configure -d organization=<ORG_URL>。 如果未配置为默认或通过 git 配置进行选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/path-filter 应用策略的路径 () 。 支持绝对路径、通配符和由 分隔的 ;多个路径。 示例: /WebApp/Models/Data.cs/WebApp/**.cs,/WebApp/Models/Data.cs;ClientApp/Models/Data.csproject, p 项目的名称或 ID。 可以使用 配置默认项目 az devops configure -d project=<NAME_OR_ID>。 如果未配置为默认或通过 git 配置进行选取,则为必需repository-id 要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345required-reviewer-ids;分隔的审阅者电子邮件地址。 例如:john@contoso.com;alice@contoso.comsubscription 订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。

    绕过分支策略

    在某些情况下,可能需要绕过策略要求。 绕过权限允许将更改直接推送到分支,或完成不满足分支策略的拉取请求。 可以向用户或组授予绕过权限。 可以将绕过权限的范围限定为整个项目、存储库或单个分支。

    两个权限允许用户以不同方式绕过分支策略:

  • 完成拉取请求时的绕过策略仅适用于拉取请求完成。 即使拉取请求不满足策略,具有此权限的用户也可以完成拉取请求。

  • 推送适用于来自本地存储库的推送和在 Web 上进行的编辑时绕过策略。 具有此权限的用户可以将更改直接推送到受保护的分支,而无需满足策略要求。

    有关管理这些权限的详细信息,请参阅 Git 权限

    在 TFS 2015 到 TFS 2018 Update 2 中, 豁免策略强制 权限允许具有此权限的用户执行以下操作:

  • 完成拉取请求时,选择替代策略并完成拉取请求即使不满足当前分支策略集也是如此。
  • 即使该分支设置了分支策略,也直接推送到该分支。 请注意,当具有此权限的用户进行将覆盖分支策略的推送时,推送会自动绕过分支策略,且没有选择加入步骤或警告。
  • 授予绕过策略的能力时要小心,尤其是在存储库和项目级别。 策略是安全且合规的源代码管理的基石。

    路径筛选器

    多个分支策略提供路径筛选器。 如果设置了路径筛选器,则策略仅适用于与路径筛选器匹配的文件。 将此字段留空意味着该策略将应用于分支中的所有文件。

    可以指定绝对路径 (路径必须以 / 或通配符) 和通配符开头。

  • /WebApp/Models/Data.cs
  • /WebApp/*
  • */Models/Data.cs
  • 可以使用 作为分隔符指定多个路径 ;

  • /WebApp/Models/Data.cs;/ClientApp/Models/Data.cs
  • 如果以其他方式包含以 作为前缀 ! 的路径,则排除这些路径。

  • /WebApp/*;!/WebApp/Tests/* 包括 中的所有文件, /WebApp/WebApp/Tests
  • !/WebApp/Tests/* 不指定任何文件,因为首先不包含任何文件
  • 筛选器的顺序非常重要。 从左到右应用筛选器。

  • 是否可以将更改直接推送到具有分支策略的分支?
  • 什么是自动完成?
  • 何时检查分支策略条件?
  • 是否可以在分支策略中使用 XAML 生成定义?
  • 对于所需的代码审阅者,可以使用哪些通配符?
  • 所需的代码审阅者路径是否区分大小写?
  • 如何将多个用户配置为所需的审阅者,但只需要其中一个用户批准?
  • 我具有绕过策略权限。 为什么在拉取请求状态中仍会看到策略失败?
  • 设置“允许请求者批准自己的更改”时,为什么我无法完成自己的拉取请求?
  • 如果路径筛选器中的路径既不以 / 通配符开头,也不以通配符开头,会发生什么情况?
  • 是否可以将更改直接推送到具有分支策略的分支?

    除非你有权绕过分支策略,否则无法将更改直接推送到具有所需分支策略的分支。 只能通过 拉取请求对这些分支进行更改。 如果没有必需的分支策略,可以直接将更改推送到具有 可选 分支策略的分支。

    什么是自动完成?

    将请求拉取到配置了分支策略的分支具有 “设置自动完成 ”按钮。 选择此选项可在满足所有策略后自动完成拉取请求。 如果不希望发生任何更改问题,则自动完成非常有用。

    何时检查分支策略条件?

    当拉取请求所有者推送更改以及审阅者投票时,分支策略在服务器上重新计算。 如果策略触发生成,生成状态将设置为“等待”,直到生成完成。

    是否可以在分支策略中使用 XAML 生成定义?

    否,不能在分支策略中使用 XAML 生成定义。

    对于所需的代码审阅者,可以使用哪些通配符?

    单个星号 * 匹配任意数量的字符,包括正斜杠 / 和反斜杠 \。 问号 ? 匹配任何单个字符。

  • *.sql 匹配扩展名为 .sql 的所有文件。
  • /ConsoleApplication/* 匹配名为 ConsoleApplication 的文件夹下的所有文件。
  • /.gitattributes 匹配存储库根目录中的 .gitattributes 文件。
  • */.gitignore 匹配存储库中的任何 .gitignore 文件。
  • 所需的代码审阅者路径是否区分大小写?

    否,分支策略不区分大小写。

    如何将多个用户配置为所需的审阅者,但只需要其中一个用户批准?

    可以将 用户添加到组,然后将该组添加为审阅者。 然后,组的任何成员都可以批准以满足策略要求。

    我具有绕过策略权限。 为什么在拉取请求状态中仍会看到策略失败?

    配置的策略始终会评估拉取请求更改。 对于具有绕过策略权限的用户,报告的策略状态仅为公告。 如果具有绕过权限的用户批准,则失败状态不会阻止拉取请求完成。

    为什么在“允许请求者批准其自己的更改已设置”时无法完成自己的拉取请求?

    “需要最少数量的审阅者”策略和“自动包含审阅者”策略都有允许请求者批准其自己的更改的选项。 在每个策略中,设置仅适用于该策略。 设置不会影响其他策略。

    例如,拉取请求设置了以下策略:

  • 需要最少数量的审阅者 需要至少一个审阅者。
  • 自动包含的审阅者 要求你或你作为审阅者加入的团队。
  • 自动包含的审阅者 已启用 “允许请求者批准其自己的更改 ”。
  • 要求最少数量的审阅者 未启用 “允许请求者批准其自己的更改 ”。
  • 在这种情况下,你的审批满足自动包含的审阅者,但不需要最少数量的审阅者,因此无法完成拉取请求。

    还可能存在其他策略,例如 禁止最近的推送程序批准他们自己的更改,即使设置了 “允许请求者批准其自己的 更改”,也会阻止你批准自己的更改。

    如果路径筛选器中的路径既不以 / 通配符开头,也不以通配符开头,会发生什么情况?

    路径筛选器中既不以 / 通配符开头也不以通配符开头的路径将不起作用,并且路径筛选器的计算方式与未指定该路径一样。 这是因为此类路径与以 开头的 / 绝对文件路径不匹配。

  • 关于分支和分支策略
  • 使用配置文件配置 Git 存储库策略
  • 默认 Git 权限(安全性)
  • 设置权限(安全性)
  • 跨服务集成概述
  •  
    推荐文章