我在Github上的仓库设置了一个分支保护规则,对于主分支(master branch)进行以下检查(启用):
- 要求在合并之前进行Pull Request审核
- 所需批准的评审者: 1
- 包括管理员
- 限制谁可以推送到匹配分支
那么现在情况是,团队中至少有一位成员必须审核通过PR,然后其他人才能将自己的dev分支合并到master分支。
除了上述内容外,我还想选择只有一些人有权限合并已审核和批准的PR,而不是每个人都可以访问该仓库。
这种设置是否可行?
我在Github上的仓库设置了一个分支保护规则,对于主分支(master branch)进行以下检查(启用):
那么现在情况是,团队中至少有一位成员必须审核通过PR,然后其他人才能将自己的dev分支合并到master分支。
除了上述内容外,我还想选择只有一些人有权限合并已审核和批准的PR,而不是每个人都可以访问该仓库。
这种设置是否可行?
CODEOWNERS
文件 并在分支保护设置中要求代码所有者的批准。CODEOWNERS
文件中使用以下内容:* @my-org/core
我也有和你一样的需求,只允许特定的人(而不是所有协作者)批准对主分支的更改。对于 Github 免费公共仓库
,我按照以下步骤操作:
Github Actions
文件来检查运行该文件的人员姓名。如果这是一个强大的协作者的名字,则该操作将成功。
name: actions_on_main_branch
on:
pull_request_target:
types:
- opened
- synchronize
- reopened
branches:
- 'main'
jobs:
job1:
name: check_adminA
runs-on: ubuntu-latest
env:
NAME_ADMIN: adminA
steps:
- name: st1
if: ${{ github.actor != env.NAME_ADMIN }}
run: exit 1
- name: st2
if: ${{ github.actor == env.NAME_ADMIN }}
run: echo "ok"
在存储库设置中,添加保护“main”分支的规则。在该规则中,选择'Require status checks to pass before merging'
并选择您之前在Github Actions文件中指定的jobs
。(如果没有显示作业,请尝试创建触发这些Github Actions的拉取请求,然后在搜索栏中找到作业) (您还可以选择'Include administrators'
)
通过这样做,对“main”分支进行的更改必须通过拉取请求,并且这些检查将运行并失败并防止合并。直到强大的协作者(adminA,adminB)进入该拉取请求并重新运行它们,这些检查才会成功并允许合并。
(pull_request_target事件使Github-actions
在基本分支的上下文中运行,而不是合并分支。因此,您不必担心Github Actions文件很容易从外部编辑通过。)
pull_request_target
事件将确保从主分支中选择 github-actions 文件,而不是合并分支。这意味着协作者无法修改来自合并分支的操作以使 PR 全部通过。 - irous使用“分支保护规则”可以实现此功能:
@irous 我按照你的答案操作,对于单个用户来说它是有效的,但是当尝试指定多个用户时,要求这两个指定的协作者必须通过才能进行PR合并。以下是添加的脚本:
job1:
name: check_adminA
runs-on: ubuntu-latest
env:
NAME_ADMIN1: pracin
steps:
- name: st1
if: ${{ github.actor != env.NAME_ADMIN1 }}
run: exit 1
- name: st2
if: ${{ github.actor == env.NAME_ADMIN1 }}
run: echo "ok"
job2:
name: check_adminB
runs-on: ubuntu-latest
env:
NAME_ADMIN2: stephus
steps:
- name: st1
if: ${{ github.actor != env.NAME_ADMIN2 }}
run: exit 1
- name: st2
if: ${{ github.actor == env.NAME_ADMIN2 }}
run: echo "ok"
steps:
- if: ${{ env.ADMIN1 != 'user1' || env.ADMIN2 != 'user2' }}
run: exit
- if: ${{ env.ADMIN1 == 'user1' || env.ADMIN2 == 'user2' }}
run: echo "ok"
- Pensec我记得至少一半的功能都在GitHub的设置中。在你的情况下,只有审批者应该被添加为“合作者”,因为他们可以进行push
操作。其他用户将不得不打开一个pull request
来进行任何更改。