Github 分支保护规则,设置分支名称的模式

Posted

技术标签:

【中文标题】Github 分支保护规则,设置分支名称的模式【英文标题】:Github Branch protection rule, pattern for set branch names 【发布时间】:2021-10-05 04:37:23 【问题描述】:

我正在尝试为我的 repo 上的 set 分支设置规则,但存在仅适用于特定分支的模式问题。 即规则仅适用于brances master,develop,release

问题:模式没有选择错误的分支

我尝试查看这里,但它按预期工作 https://ruby-doc.org/core-2.5.1/File.html#method-c-fnmatch

我已经尝试过,但没有使用 0 个分支或选择的所有内容:

^.*(master).*$,^.*(develop).*$ [master,develop,release] [master;develop;release]*

ps 这一个剂量相反,适用于所有支架,但列出的是: *[!master|!develop|!release]*

【问题讨论】:

我的理解是,该模式是一个全局“表达式”,而不是您所解释的正则表达式。所以你可以做(​​比如说)release-*,但不能像你想做的那样=你必须有3个单独的规则。我对此的方法是,我认为单个规则更改是使用 github 操作编写脚本以使用 API 设置规则。但令人惊讶的是,该 API 甚至没有模式方法 - 您必须在您想要的每个分支上明确设置它。 【参考方案1】:

我有一个解决方法,但我确信有更好的解决方案,或者解决这个问题。 我基本上使用规则的优先顺序,只使用我想要的规则设置分支。

我针对除我想要的分支之外的每个分支,并设置无规则。 然后将所有分支设置为要求我想要的规则应用于我的分支。 第一条规则是总统,并确保只有我想要的人才能获得规则。

注意有一个 规则中提出的冲突,这似乎更像是一个警告

【讨论】:

【参考方案2】:

作为johnfo says in a comment,GitHub 的分支保护规则模式不是正则表达式。事实上,the GitHub documentation 提到他们专门是Ruby File::FNM_PATHNAME style expressions。这是非常具体的(Git 本身根本不使用 Ruby 代码)。

我剪掉了git 标签;奇怪的是,您自己包含了fnmatch,对于可能希望在此处提供正确 Ruby 表达式的人来说,这是正确的标签。看起来 GitHub 没有设置 FNM_EXTMATCH 标志,因此您可能需要多个匹配表达式(也在上面的评论中注明)。除了添加一些链接似乎有用之外,我不会费心回答。

【讨论】:

以上是关于Github 分支保护规则,设置分支名称的模式的主要内容,如果未能解决你的问题,请参考以下文章

不需要接受提交以开发具有特定名称模式的分支

Git设置分支保护实现CodeReview卡点

git命令——从GitHub clone XXX分支,本地创建新分支push到远程仓库

从 GitHub.com 上的受保护分支恢复合并提交

如何限制谁可以合并到 github repo 上的 master?

将上游分支设置为与本地名称不同的远程分支