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

7
我正在尝试为我的仓库设置分支规则,但是在应用于特定分支的模式上遇到了问题。 例如,只将规则应用于主分支、开发分支和发布分支。
问题:该模式没有选择错误的分支。
我尝试查看这里,但它按预期工作: 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]*


2
我的理解是,该模式是一种通配符“表达式”,而不是正则表达式,就像你所解释的那样。因此,您可以使用(例如)release-*,但不能像您尝试的那样 = 您必须有3个单独的规则。我的方法是,我认为应该更改为单个规则的内容,是使用github操作脚本来使用API设置规则。令人惊讶的是,API甚至没有模式方法-您必须在要使用它的每个分支上显式设置它。 - johnfo
我已经发布了一个社区反馈帖子,请求将正则表达式作为新功能添加。 - Richard Tyler Miles
4个回答

3
正如johnfo在评论中所说的那样,GitHub的分支保护规则模式不是正则表达式。实际上,GitHub文档提到它们是特定的Ruby File :: FNM_PATHNAME风格表达式。这非常具体化(Git本身根本没有使用任何Ruby代码)。
我剪切了标签; 奇怪的是,你自己包含了,这是适合于可能想在此处提供正确的Ruby表达式的人的正确标签。看起来GitHub没有设置FNM_EXTMATCH标志,所以您可能需要多个匹配表达式(也在上面的评论中注意到)。除了添加一些链接似乎没有什么用处,我不会打扰回答。

2
我有一个解决方法,但我相信有更好的或正确的解决方案。基本上,我使用规则的优先顺序来仅设置我想要的规则的分支。
  • 我针对除了我想要的分支以外的每个分支,并设置没有规则
  • 然后将所有分支设置为需要我想要的规则应用于我的分支。
  • 第一条规则具有优先权,并确保只有我想要的分支才能获得该规则。

NB:在规则中引发了冲突,但这似乎更像是一个警告

enter image description here


1
自从2023年4月引入规则集以来,官方文档是“使用fnmatch语法”。
但也有:

使用正则表达式进行提交元数据

当您添加元数据限制时,可以使用正则表达式语法来定义相关元数据(例如提交消息或分支或标记名称)必须或不得匹配的模式。

规则集支持RE2语法。有关更多信息,请参阅Google的语法指南。要验证您的表达式,可以使用regex101.com上的验证器,在左侧边栏中选择“Golang”风格。


1
您可以尝试使用[dm]*[pr] 来筛选以 'd' 或 'm' 开头并以 'p' 或 'm' 结尾的分支(例如 developmaster 分支)。我相信这可以进一步完善。

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