如何在GitHub中阻止提交者合并拉取请求

13
我正在寻找通过GitHub(或CircleCI)设置的方法,以防止打开或提交拉取请求的人能够合并或批准该拉取请求。
到目前为止,我已经保护了需要批准的分支,但是在批准后,作为PR创建者和提交者,我仍然能够合并。

你不能通过CI系统来解决这个问题,因为当尝试合并时它不会被调用。唯一的方法是在PR被批准并通过所有检查后,只允许机器人执行以控制谁执行。 - bk2204
4个回答

15

你需要防止参与 PR(创建 PR 或提交代码)的人能够合并 PR(甚至批准它)。

GitHub 默认情况下不允许贡献者创建的 PR 自己批准或请求更改,所以已经考虑到这点了。

由于 Pull Request 是 GitHub 的一个特性,目前只有两种方法可以阻止 PR 合并:

  • 使用 GitHub 的设置
  • 使用预接收挂钩(仅适用于 GitHub Enterprise)

通过使用 GitHub 的设置,您只能通过要求通过拉取请求审查、状态检查、签名提交或线性历史来阻止合并,如在分支保护设置下所示。

enter image description here

或者通过在存储库设置下的合并按钮部分显示的允许合并提交、压缩合并或变基合并

enter image description here

如果您使用的是 GitHub Enterprise,则可以使用预接收挂钩来阻止自我合并 PR文档)。下面是一个示例,确保阻止自我合并的 PR(此示例在此处)。

if [[ "$GITHUB_VIA" = *"merge"* ]] && [[ "$GITHUB_PULL_REQUEST_AUTHOR_LOGIN" = "$GITHUB_USER_LOGIN" ]]; then
    echo "Blocking merging of your own pull request."
    exit 1
fi

exit 0
除此之外,在GitHub上目前没有其他阻止自我合并PR的方法。使用CircleCI或任何其他CI工作流只能阻止每个人(如果您选择在GitHub上需要状态检查)或任何人的合并,因为它无法控制PR合并按钮。

我在 GitHub 的设置页面,接下来该去哪里? - backward forward
1
它在一个不太明显的地方 - 从设置中,进入到 “分支”,然后选择 “分支保护规则”。 - jws

3

简短的回答是否定的。

GitHub 支持启用主分支保护。这可以帮助您强制执行各种规则,例如:

  • 所有 PR(拉取请求)在合并之前必须进行代码审查
  • 代码审查员需要是管理员
  • 代码审查员需要在 CODEOWNERS 文件中
  • 一些状态检查都需要通过

对于所有这些规则,假设满足了它们,具有写入访问权限的任何人都可以合并 PR。我很好奇 - 在什么情况下您想要防止这种情况发生?

现在谈论不好的想法。如果这非常重要 - 您可以采取极端措施,确保没有人负责合并 PR。您可以添加一个映射到机器人帐户的代码所有者,确保机器人帐户在合并之前执行审核。为此,您可以编写自定义 GitHub 动作中的逻辑,该动作在 PR 事件上触发,以确定是否应合并 PR,并在满足所有适当条件时自动合并。


1
我不是在寻找自动批准(或机器人)- 我是在寻求防止由提交者合并,并由提交者批准的流程原则。这旨在遵循以下原则:不要批准自己的漫画,不要合并自己的提交。 - bensiu
我想表达的是,这就是审批的作用。GitHub 假设只要有其他 非作者 的人签字,那么提交的代码就能被任何拥有写入权限的人合并。 - Justin Beckwith
@JustinBeckwith 我需要这个功能的原因是我们有一个要求,即所有提交都必须由我们公司的成员签名。如果您通过GitHub的Web UI进行合并,则会使用其自己的GPG密钥来签署提交。这意味着唯一的方法是通过命令行执行合并,以便您的本地GPG代理提供您的密钥。这就是为什么我想让通过GitHub UI合并变得不可能的原因。 - Jamie

1

0
如果您可以访问存储库设置,您可以为特定分支打开“锁定分支”标志,使其只读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接