分支策略和设置
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
分支策略可帮助团队保护其重要的开发分支。 这些策略强制实施团队的代码质量和更改管理标准。 本文介绍如何设置和管理分支策略。 有关所有存储库以及分支策略和设置的概述,请参阅 Git 存储库设置和策略。
无法删除配置了所需策略的分支,并且所有更改都需要拉取请求 (PR)。
先决条件
- 若要设置分支策略,请成为项目管理员安全组的成员,或者具有存储库级别的 编辑策略 权限。 有关详细信息,请参阅设置 Git 存储库权限。
要管理分支策略,请选择“存储库”>“分支”以在 Web 门户中打开“分支”页。
还可以通过“项目设置”>“存储库”>“策略”>“分支策略”><>“分支名称”来访问分支策略设置。
具有策略的分支会显示一个策略图标。 选择该图标可直接转到分支的策略设置。
要设置分支策略,请找到要管理的分支。 可以浏览列表或在右上角的“搜索分支名称”框中搜索分支。
选择分支旁边的“更多选项”图标,然后从上下文菜单中选择“分支策略”。
在页面中找到分支。 可以浏览列表或使用右上角的“搜索所有分支”框搜索分支。
选择“...”按钮。 从上下文菜单中选择“分支策略”。
在分支的设置页上配置策略。 有关每种策略类型的描述和说明,请参阅以下部分。
在“策略”页面中配置策略。 有关每种策略类型的说明,请参阅以下部分。 选择“保存更改”以应用新策略配置。
可以使用 Azure DevOps CLI 列出或显示分支或存储库的策略。
列出策略
要列出项目中的所有策略,请使用 az repos policy list。
az repos policy list [--branch]
[--detect {false, true}]
[--org]
[--project]
[--query-examples]
[--repository-id]
[--subscription]
参数
参数 |
说明 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
%> |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
query-examples |
建议的 JMESPath 字符串。 可以复制其中一个查询,并将其粘贴到 --query 参数后,置于双引号中,以查看结果。 可以添加一个或多个位置关键字,以便根据这些关键字提供建议。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
示例
以下命令返回在 ID 为 main
的 Fabrikam 存储库的 d28cd374-e7f0-4b1f-ad60-f349f155d47c
分支中生效的所有分支策略。 可以通过运行 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]
参数
参数 |
说明 |
%> |
策略的 ID。 必需。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
%> |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
query-examples |
建议的 JMESPath 字符串。 可以复制其中一个查询,并将其粘贴到 --query 参数后,置于双引号中,以查看结果。 可以添加一个或多个位置关键字,以便根据这些关键字提供建议。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
需要最少数量的审阅者
代码评审对于软件开发项目非常重要。 要确保团队评审和批准 PR,可以要求获得最少数量的审阅者批准。 基本策略要求指定数量的审阅者批准代码,无人拒绝。
要设置策略,请在“分支策略”下,将“需要最少数量的审阅者”设置为“开”。 输入所需的审阅者数,并选择以下任一选项:
选择“允许请求者批准自己的更改”以允许 PR 的创建者对其审批进行投票。 否则,创建者仍然可以对 PR 投“批准”票,但他们的投票不计入最小审阅者数目。
选择“禁止近期的推送者审批自己的更改”以强制实施职责分离。 默认情况下,任何对源分支具有推送权限的人都可以添加提交并对 PR 审批进行投票。 选择此选项意味着最近推送者的投票不计算在内,即便他们通常可以批准自己的更改。
选择“即使某些审阅者投票等待或拒绝,仍允许完成”,以便即使某些审阅者投票反对 PR 仍能完成。 仍必须批准的最小审阅者数目。
- 在“推送新更改时”下:
- 选择“上一次迭代至少需要获得一个批准”,以要求对上次源分支更改进行至少一次审批投票。
- 选择“重置所有审批投票(不重置“拒绝”或“等待”投票)”,以便在源分支每次发生更改时删除所有审批投票,但保留拒绝或等待投票。
- 选择“重置所有代码审阅者投票”,以便每当源分支发生更改时删除所有审阅者投票,包括批准、拒绝或等待的投票。
- 在“推送新更改时”下:
- 选择“每次迭代至少需要获得一个批准”,以要求对上次源分支更改进行至少一次审批投票。 用户的批准不会计入该用户推送的任何先前未经批准的迭代。 因此,另一个用户需要对上次迭代进行其他批准。 Azure DevOps Server 2022.1 及更高版本提供“每次迭代至少需要获得一个批准”功能。
- 选择“上一次迭代至少需要获得一个批准”,以要求对上次源分支更改进行至少一次审批投票。
- 选择“重置所有审批投票(不重置“拒绝”或“等待”投票)”,以便在源分支每次发生更改时删除所有审批投票,但保留拒绝或等待投票。
- 选择“重置所有代码审阅者投票”,以便每当源分支发生更改时删除所有审阅者投票,包括批准、拒绝或等待的投票。
- 如果未选择“请求者可以批准自己的更改”,则拉取请求的创建者仍可以对其拉取请求投“批准”票,但其投票不会计入“最小审阅者数目”。
- 如果任何审阅者拒绝更改,则拉取请求无法完成,除非选择“即使某些审阅者投票等待或拒绝,仍允许完成”。
- 在将新更改推送到源分支时,可以重置代码审阅者投票。 选择“有新更改时重置代码审阅者投票”。
如果所有其他策略都通过,则创建者可以在所需数量的审阅者批准 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]
参数
参数 |
说明 |
allow-downvotes |
允许投反对票。 接受的值:false 、true 。 必需。 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 必需。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 必需。 |
creator-vote-counts |
计算创建者的投票。 接受的值:false 、true 。 必需。 |
enabled |
启用策略。 接受的值:false 、true 。 必需。 |
minimum-approver-count |
所需的最小审批者数。 例如:2 。 必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 必需。 |
reset-on-source-push |
将更改推送到源时重置投票。 接受的值:false 、true 。 必需。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
示例
以下示例将 Fabrikam 存储库 2
分支中的拉取请求所需的最小审批数设置为 main
。 该该策略允许投反对票,这意味着即使一些审阅者投票不批准,拉取请求也可以完成,只要投票批准的人数达到最低限度。 推送到源分支不会重置投票。 该策略还允许拉取请求创建者批准自己的拉取请求。
该示例使用默认配置 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]
参数
参数 |
说明 |
%> |
策略的 ID。 必需。 |
allow-downvotes |
允许投反对票。 接受的值:false 、true 。 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
creator-vote-counts |
计算创建者的投票。 接受的值:false 、true 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
enabled |
启用策略。 接受的值:false 、true 。 |
minimum-approver-count |
所需的最小审批者数。 例如:2 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
reset-on-source-push |
将更改推送到源时重置投票。 接受的值:false 、true 。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
检查链接的工作项
对于工作项管理跟踪,可以要求在 PR 和工作项之间创建关联。 链接工作项为更改提供更多上下文,并确保更新通过工作项跟踪过程。
要设置策略,请在“分支策略”下,将“检查链接的工作项”设置为“开”。 此设置要求将工作项链接到 PR,以便 PR 合并。 将设置设为“可选”,以便在没有链接的工作项时发出警告,但允许完成拉取请求。
可以使用 Azure CLI az repos policy work-item-linking 为分支或存储库创建和更新工作项链接策略。
创建工作项链接策略
使用 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]
参数
参数 |
说明 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 必需。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 必需。 |
enabled |
启用策略。 接受的值:false 、true 。 必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
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]
参数
参数 |
说明 |
%> |
策略的 ID。 必需。 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
enabled |
启用策略。 接受的值:false 、true 。 |
minimum-approver-count |
所需的最小审批者数。 例如:2 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
示例
以下示例更新 Fabrikam 存储库的 3
分支的策略 ID main
,使其启用但可选。 该示例使用默认配置 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 命令。
“检查注释解决情况”策略检查是否已解决所有 PR 注释。
通过将“检查注释解决情况”设置为“打开”,为分支配置注释解决情况策略。 然后选择是将策略设为“必需”还是“可选”。
有关使用拉取请求注释的详细信息,请参阅评审拉取请求。
选择“检查注释解决情况”,为分支配置注释解决情况策略。
有关使用拉取请求注释的详细信息,请参阅评审拉取请求。
可以使用 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]
参数
参数 |
说明 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 必需。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 必需。 |
enabled |
启用策略。 接受的值:false 、true 。 必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 必需。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 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]
参数
参数 |
说明 |
%> |
策略的 ID。 必需。 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
enabled |
启用策略。 接受的值:false 、true 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
示例
以下示例更新 Fabrikam 存储库 6
分支中的注释解决情况策略 ID main
将其设为阻止。 必须先解决注释,然后才能合并拉取请求。 该示例使用默认配置 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 命令。
限制合并类型
Azure Repos 有多种合并策略,默认情况下,所有这些都是允许的。 可以通过强制实施 PR 完成的合并策略来维护一致的分支历史记录。
将“限制合并类型”设置为“开”,以限制存储库中允许的合并类型。
- 基本合并(无快进)在目标中创建一个合并提交,其父级是目标和源分支。
- Squash 合并使用源分支中的更改在目标分支中创建具有单个提交的线性历史记录。 详细了解压缩合并及其如何影响分支历史记录。
- 变基和快进通过在不合并提交的情况下将源提交重播到目标分支来创建线性历史记录。
- “通过合并提交变基”将源提交重播至目标,并创建合并提交。
注意
此功能适用于 Azure DevOps Server 2020 及更高版本。
可以使用 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}]
参数
参数 |
说明 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 必需。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 必需。 |
enabled |
启用策略。 接受的值:false 、true 。 必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 必需。 |
allow-no-fast-forward |
基本合并(无快进)。 将开发过程中出现的非线性历史记录原原本本地保留。 接受的值:false 、true 。 |
allow-rebase |
变基和快进。 通过将源分支的提交内容重播至目标分支(且不使用合并提交),创建线性历史记录。 接受的值:false 、true 。 |
allow-rebase-merge |
通过合并提交变基。 通过将源分支的提交内容重播至目标分支并创建合并提交,创建半线性历史记录。 接受的值:false 、true 。 |
allow-squash |
压缩合并。 通过将源分支的提交内容压缩进目标分支上的单个新提交,创建线性历史记录。 接受的值:false 、true 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
use-squash-merge |
始终压缩合并。 此选项不适用于其他合并类型。 接受的值:false 、true 。
注意:use-squash-merge 已弃用,并将从未来版本中删除。 请改用 --allow-squash 。 |
示例
以下示例为 Fabrikam 存储库 main
分支中的拉取请求设置所需的合并策略,以允许压缩合并。 该示例使用默认配置 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}]
参数
参数 |
说明 |
%> |
策略的 ID。 必需。 |
allow-no-fast-forward |
基本合并(无快进)。 将开发过程中出现的非线性历史记录原原本本地保留。 接受的值:false 、true 。 |
allow-rebase |
变基和快进。 通过将源分支的提交内容重播至目标分支(且不使用合并提交),创建线性历史记录。 接受的值:false 、true 。 |
allow-rebase-merge |
通过合并提交变基。 通过将源分支的提交内容重播至目标分支并创建合并提交,创建半线性历史记录。 接受的值:false 、true 。 |
allow-squash |
压缩合并。 通过将源分支的提交内容压缩进目标分支上的单个新提交,创建线性历史记录。 接受的值:false 、true 。 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
enabled |
启用策略。 接受的值:false 、true 。 |
org |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
use-squash-merge |
是否始终压缩合并。 此选项不适用于其他合并类型。 接受的值:false 、true 。 |
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
强制执行合并战略
通过在拉取请求完成时强制实施合并策略来维护一致的分支历史记录。
选择“强制实施合并策略”并选择一个选项,要求拉取请求使用该策略进行合并。
- 无快进合并 - 此选项在拉取请求关闭时合并源分支的提交历史记录,并在目标分支中创建合并提交。
- Squash 合并 - 使用一个 Squash 合并完成所有的拉取请求,使用源分支的更改在目标分支中创建一个单独的提交。 详细了解压缩合并及其如何影响分支历史记录。
生成验证
可以设置一个策略,要求在 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]
参数
参数 |
说明 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 必需。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 必需。 |
build-definition-id |
生成定义 ID。 必需。 |
display-name |
此生成策略的显示名称,用于标识策略。 例如:Manual queue policy 。 必需。 |
enabled |
启用策略。 接受的值:false 、true 。 必需。 |
manual-queue-only |
是否仅允许手动将生成排入队列。 接受的值:false 、true 。 必需。 |
queue-on-source-update-only |
是否仅在源更新时将生成排入队列。 接受的值:false 、true 。 必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 必需。 |
valid-duration |
策略有效期(以分钟为单位)。 注意:valid-duration 必须介于零至一年之间,并且当 --queue-on-source-update-only 为 false 时必须为零。 必需。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
org |
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.cs 。 |
%> |
项目的名称或 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]
参数
参数 |
说明 |
%> |
策略的 ID。 必需。 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
build-definition-id |
生成定义 ID。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
display-name |
此生成策略的显示名称,用于标识策略。 例如:Manual queue policy 。 |
enabled |
启用策略。 接受的值:false 、true 。 |
manual-queue-only |
是否仅允许手动将生成排入队列。 接受的值:false 、true 。 |
org |
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.cs 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
queue-on-source-update-only |
是否仅在源更新时将生成排入队列。 接受的值:false 、true 。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
valid-duration |
策略有效期(以分钟为单位)。 |
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
设置一个策略,要求在拉取请求中进行更改,以便在完成拉取请求之前使用受保护的分支成功生成。
生成策略可减少中断并保持测试结果通过。 即使在开发分支上使用持续集成 (CI) 来及早发现问题,生成策略也会有所帮助。
如果启用了删除验证策略,则在创建新的拉取请求或向以该分支为目标的现有拉取请求推送更改时,新生成将排入队列。 然后,生成策略会评估生成结果,以确定拉取请求是否可以完成。
重要
在指定生成验证策略之前,请先创建一个生成定义。 如果没有,请参阅创建生成定义并选择与项目类型匹配的生成类型。
选择“添加生成策略”,然后在“添加生成策略”中配置选项。
选择“生成定义”。
选择触发器类型。 选择“自动(每当更新源分支)”或“手动”。
选择“策略要求”。 如果选择“必需”,则生成必须成功完成才能完成拉取请求。 选择“可选”可在生成失败时发送通知,但仍允许拉取请求完成。
设置生成过期时间,以确保对受保护分支的更新不会中断打开的拉取请求的更改。
- 更新
branch name
后立即:当受保护分支更新后,此选项将拉取请求中的生成策略状态设置为“失败”。 将生成重新排入队列以刷新生成状态。 此设置可确保即使受保护分支更改,拉取请求中的更改也能成功生成。 此选项最适合拥有重要分支且变更量较小的团队。 使用繁忙开发分支的团队可能会发现,每次更新受保护的分支时,等待生成完成都会造成中断。
- 如果
n
已更新,则在 branch name
小时后:如果传递的生成早于输入的阈值,则当受保护的分支更新时,此选项将使当前策略状态过期。 此选项是在受保护分支更新时始终要求生成和从不需要生成之间的折衷。 此选项非常适合在受保护分支频繁更新时减少生成数。
- 从不:对受保护分支的更新不会更改策略状态。 此值可减少分支的生成数。 关闭最近未更新的拉取请求时,可能会导致问题。
为此生成策略输入可选的显示名称。 此名称标识“分支策略”页上的策略。 如果未指定显示名称,则策略将使用生成定义名称。
选择“保存”。
当所有者推送成功生成的更改时,策略状态将更新。 如果选择了“更新 branch name
后立即”或“如果 n
已更新,则在 branch name
小时后”生成策略,则在更新受保护分支后,策略状态也将更新,前提是最新的生成不再有效。
状态检查
外部服务可以使用 PR 状态 API 将详细状态发布到 PR。 附加服务的分支策略使这些外部服务能够参与 PR 工作流和建立策略要求。
有关配置此策略的说明,请参阅为外部服务配置分支策略。
需要外部服务的审批
外部服务可以使用 PR 状态 API 将详细状态发布到 PR。 额外服务的分支策略为这些外部服务提供了参与 PR 工作流和建立策略要求的能力。
有关配置此策略的说明,请参阅为外部服务配置分支策略。
自动包括代码审阅者
可以自动将审阅者添加到更改特定目录和文件中文件的拉取请求,或添加到存储库中的所有拉取请求。
选择“自动包含的审阅者”旁边的 + 按钮。
填写“添加新审阅者策略”屏幕。
将人员和组添加到“审阅者”。
如果要自动添加审阅者,但不需要他们的批准即可完成拉取请求,请选择“可选”。
或者,如果在满足以下条件后才能完成拉取请求,请选择“必需”:
- 添加为审阅者的每个人都批准更改。
- 添加为审阅者的每个组中至少有一人批准更改。
- 如果只需要一个组,则由你指定的最小成员数批准更改。
指定需要自动包含审阅者的文件和文件夹。 将此字段留空以要求审阅者处理分支中的所有拉取请求。
如果拉取请求所有者可以投票批准自己的拉取请求来满足此策略,请选择“允许请求者批准自己的更改”。
可以指定拉取请求中显示的活动源消息。
选择“保存”。
注意
此功能适用于 Azure DevOps Server 2020 及更高版本。
可以使用 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]
参数
参数 |
说明 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 必需。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 必需。 |
enabled |
启用策略。 接受的值:false 、true 。 必需。 |
message |
拉取请求中显示的活动源消息。 必填。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 必需。 |
required-reviewer-ids |
审阅者电子邮件地址(以 ; 分隔)。 例如:john@contoso.com;alice@contoso.com 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
org |
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.cs 。 |
%> |
项目的名称或 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]
参数
参数 |
说明 |
%> |
策略的 ID。 必需。 |
blocking |
如果不符合策略,则阻止。 接受的值:false 、true 。 |
branch |
按完全匹配筛选结果的分支名称。 需要使用 --repository-id 参数才能使用分支筛选器。 例如:--branch main 。 |
branch-match-type |
使用 branch 参数应用策略。 如果值为 exact ,则该策略适用于与 --branch 参数完全匹配的分支。 如果值为 prefix ,则该策略适用于与 --branch 参数中的前缀匹配的所有分支文件夹。 接受的值:exact 、prefix 。 默认值:exact 。 |
detect |
自动检测组织。 接受的值:false 、true 。 |
enabled |
启用策略。 接受的值:false 、true 。 |
message |
拉取请求中显示的活动源消息。 |
org |
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.cs 。 |
%> |
项目的名称或 ID。 可以使用 az devops configure -d project=<NAME_OR_ID> 配置默认项目。 如果未配置为默认或通过 git 配置进行选取,则为必需。 |
repository-id |
要按完全匹配筛选结果的存储库的 ID。 例如,--repository-ID e556f204-53c9-4153-9cd9-ef41a11e3345 。 |
required-reviewer-ids |
审阅者电子邮件地址(以 ; 分隔)。 例如:john@contoso.com;alice@contoso.com 。 |
subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
为存储库中的特定目录和文件选择审阅者。
这些审阅者会自动添加到沿这些路径更改文件的拉取请求中。 还可以指定活动源消息。
如果选择“必需”,则在满足以下条件后才能完成拉取请求:
- 添加为路径审阅者的每位用户都批准更改。
- 添加到路径的每个组中至少有一人批准更改。
- 为添加到路径的每个组指定的审阅者数批准更改。
如果要自动添加审阅者,但不需要他们的批准即可完成拉取请求,请选择“可选”。
可以选择“请求者可以批准其自己的更改”。
当所有必需的审阅者批准代码后,便可以完成拉取请求。
绕过分支策略
在某些情况下,可能需要绕过策略要求。 通过绕过权限,可以直接将更改推送到分支,或完成不符合分支策略的拉取请求。 可以向用户或组授予绕过权限。 可以将绕过权限的范围限定为整个项目、存储库或单个分支。
以下两种权限允许用户以不同方式绕过分支策略:
有关管理这些权限的详细信息,请参阅 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 文件。
所需的代码审阅者路径是否区分大小写?
否,分支策略不区分大小写。
可以将用户添加到组,然后将该组添加为审阅者。 然后,组的任何成员都可以批准以满足策略要求。
我具有绕过策略权限。 为什么在拉取请求状态中仍会看到策略失败?
配置的策略始终会评估拉取请求更改。 对于具有绕过策略权限的用户,报告的策略状态仅为建议。 如果具有绕过权限的用户批准,则失败状态不会阻止拉取请求完成。
为什么设置“允许请求者批准自己的更改”后,仍无法完成自己的拉取请求?
“需要最少数量的审阅者”策略和“自动包含审阅者”策略都具有“允许请求者批准自己的更改”的选项。 在每个策略中,设置仅适用于该策略。 设置不会影响其他策略。
例如,拉取请求设置了以下策略:
- 需要最少数量的审阅者 - 需要至少一个审阅者。
- 自动包含的审阅者 - 需要你或你作为审阅者加入的团队。
- “自动包含的审阅者”已启用“允许请求者批准自己的更改”。
- “需要最少数量的审阅者”未启用“允许请求者批准自己的更改”。
在这种情况下,你的审批满足“自动包含的审阅者”,但不满足“需要最少数量的审阅者”,因此无法完成拉取请求。
可能还有其他策略(例如“禁止近期的推送者批准自己的更改”),这些策略会阻止你批准自己的更改,即使设置了“允许请求者批准自己的更改”。
如果路径筛选器中的路径不是以 /
或通配符开头,会发生什么情况?
路径筛选器中不以 /
或通配符开头的路径没有任何作用,路径筛选器的评估结果与未指定的路径相同。 这样的路径无法与绝对文件路径开头的 /
匹配。
相关文章