使用 GitPullRequestCompletionOptions 在 Azure DevOps 拉取请求上强制执行 Squash 合并

Fre*_*ggs 8 azure-devops azure-devops-rest-api

我正在尝试使用 Azure DevOps Services REST API 来设置PR Completion Options以对拉取请求强制执行压缩合并。

注意:我无法设置分支策略来强制执行壁球合并,因为我正在测试某些条件以查看是否需要壁球合并并尝试强制执行壁球,就像只为该 PR 设置了分支策略一样。

当我拨打以下电话时:

PATCH https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}?api-version=5.0

{
  "completionOptions": {
    "squashMerge": true
  } 
}
Run Code Online (Sandbox Code Playgroud)

响应显示值已设置

响应的一部分,显示 'squashMerge' 的值设置为 true。

然而,在尝试完成请求时,我希望选中并禁用“合并时挤压更改”复选框。

未选择或禁用挤压选项。

如果我按原样保留表单并完成合并,则不会执行任何挤压。

如果我设置bypassPolicy为 true,我仍然看不到完成选项的区别。

总而言之,我知道调用是成功的,因为响应是通过设置的选项返回的,但这些更改似乎并没有传递到 Azure DevOps 中的拉取请求。

tym*_*tam 8

您可以使用强制执行此操作的策略。

如果您在 DevOps 中访问分支,请选择您的分支 -> 您只能允许压缩合并的策略:

在此处输入图片说明

这应该使所有拉入请求到策略绑定的分支中使用壁球合并来完成。

以下是Set auto-complete 的工作原理: 在此处输入图片说明

  • 我根据某些条件(如源分支结构)使用动态策略,如问题中所述我无法设置分支策略。 (2认同)

Fre*_*ggs 2

微软在开发者社区论坛中给出了以下答复。

在这种情况下,UI 中的预期行为与通过 REST 端点实现的预期行为之间存在差异。在完成选项中设置 squashMerge 告诉 PR 仅当您使用 REST 端点完成时才使用挤压完成。在用户界面中,我们尊重用户设置,使用户能够选择他们想要执行的操作(如果没有启用策略)。在这种情况下,您没有启用策略,因此用户可以挤压可以不挤压。用户偏好实际上取代了您使用 REST API 执行的操作。如果他们合并了之前的 PR,我们会记住这一点,并在下一个 PR 中为他们创建相同的默认值。

TLDR:您不一定可以使用 REST 端点控制表单默认值,而应该使用策略来强制压缩合并(或者期望您的用户可以根据自己的偏好设置或不设置复选框,但我们不强制使用默认值)。