分支保护规则 (Branch protection rules) 是 github 提供的、避免重要分支被轻易地污染、删除的重要功能。它位于 Settings-Branches
面板中。
对于可以设置保护规则(目前已知非付费团队的私有库无法设置)的代码库,我们必须进行设置,以减少重要分支被误操作的可能性。
当一个分支符合“长期维护的协作分支”这样的定义时,我们就应当将其设定为受保护分支,具体来说:
- 维护周期比较长(延续数个 Sprint 、延续一个版本、延续一个 Milestore)
- 接受来自不同时段、不同开发者的合并请求
在实践中,我们通常将以下分支列为受保护分支:
- 一般意义上的主分支,如
master
、develop
等。绝大多数的变动都会汇聚到此类分支上。 - 针对特定版本的分支,如
release-branch.go1.18
、release/v1.15
等。该版本从预备发布到结束维护,生命周期内的变动都会汇聚到此类分支上。 - 其他满足定义的分支
必须启用以下规则:
-
Require a pull request before merging
即必须通过pull request
的形式将变动提交到目标分支Require approvals
&Required number of approvals before merging: 1
即必须经过至少一位 reviewer 的认可Dismiss stale pull request approvals when new commits are pushed
即新提交会重置 review 状态
-
Require status checks to pass before merging
即合并前必须通过所有已设置的检查项 -
Require conversation resolution before merging
即合并前必须将所有对话标记为“解决”
必须禁用以下规则:
Rules applied to everyone including administrators
中的Allow force pushes
即允许所有具备push
权限的用户强制推送到受保护分支上Allow deletions
即允许所有具备push
权限的用户删除受保护分支