我的意思是我想创建一条规则,并指定多个分支,比如 dev|master
。但在查看文档后,我认为这是不可能的吗?难道我必须创建两条规则才能使用同一条规则来保护两个分支吗?
我的意思是我想创建一条规则,并指定多个分支,比如 dev|master
。但在查看文档后,我认为这是不可能的吗?难道我必须创建两条规则才能使用同一条规则来保护两个分支吗?
我找到了一个相当丑陋的方法来做到这一点,至少可以接近目标(尽管如果@GitHub能给我们比fnmatch
更好的东西就好了...)。
你可以使用字符集来指定仓库名称中的起始字符,像这样:
(Using "main" branch): [dm][ea][vi]*
(Using "master" branch): [dm][ea][vs]*
它将匹配dev
和main
/master
,这正是您想要的,但第二个还将匹配“mastodon-rules”和“devo-is-my-favorite-band”,因为通配符。我认为fnmatch
不像正则表达式?
那样给你一个“零或一”的量词,所以它相当受限制。
Github的fnmatch
确实允许否定字符集,因此如果某条规则捕获了您不想包含的分支,您可能可以绕过该问题:
(using "main" branch): [dm][ea][vi][!o]*
(using "master" branch): [dm][ea][vs][!o]*
这将错过dev
分支(但它会捕获develop
和main
/master
),但它排除了“devo”,所以至少在与你的金属头朋友进行通宵摇滚时,“whip it”不会开始播放。
不可否认,这不是一个非常令人满意的解决方案。但是使用fnmatch这可能是目前最好的选择。
还有其他多个答案声称这种模式(或类似变体)可以正常工作:
[main,qa,stage,master]*
不要被这美妙的诱惑所迷惑
引擎会将方括号中的字符视为单个字符。添加逗号(或分号,或任何其他“分隔符”)也无法改变这种行为。
方括号:“匹配其中任意一个字符”
星号:“匹配任意长度的任意字符串”
因此,虽然该模式肯定会匹配方括号中的单词,但它还会匹配以方括号中的任一字符开头的任意长度的任意字符串:[aegimnqrst,]
。
今天早上我一直在努力理解这个问题,我认为你(/我们)可能需要为每个分支创建两个完全相同的规则。至少在阅读以下内容后,我是这样认为的:
版主评论:
"不,无法在“应用规则于”框中执行此操作。正如受保护分支文档中所述,我们使用fnmatch库将分支名称与匹配表达式匹配。如果启用了一个标志,那么有一种功能可以允许匹配两个规则,但我们在我们的环境中不启用该标志。"
或者,如果您想将一个规则应用于以相同匹配短语开头或包含相同匹配短语的所有分支,则可以使用此解决方案:
社区经理的评论:
分支保护规则模式基于fnmatch语法。您可以使用releases/v?.?来自动保护类似releases/v1.0、releases/v2.0和releases/v2.1的分支。而[1-9]-[0-9]-stable可以自动保护类似1-0-stable、2-0-stable和2-1-stable的分支。
跟随z4-tear的精彩解释
这将涵盖开发
主分支
和暂存分支
[dms][tea][avs]*[iet][ne][gtr]
master-blahblah
这样的东西。 - ReenigneArcher若要应用于所有内容,请添加 --> **/**
如果有人需要一个仅覆盖dev和main的规则,可以使用以下语法:
https://ruby-doc.org/core-2.5.1/File.html#method-c-fnmatch
[cd]*[vd]
缺点
将匹配所有以c或d开头,以v和d结尾的内容。
根据上述解释,[mds][aet][iva][neg]*
适用于 develop
、staging
和 main
。当然,它也匹配其他组合。
在开发和主分支上启用它,但不要在测试分支上启用
[develop;master]*[!test]*
[adelmoprstv;]
并且字符串的其余部分不包含任何字符 [est]
的任何分支上启用它。 - Z4-tierfnmatch
的唯一正确答案,但是 GitHub 似乎没有传递所需的 File::FNM_EXTGLOB
,因此实际上无法正常工作。但是,从语法上讲,这是唯一正确的答案,也是人们期望在 GitHub 使用 fnmatch
时能够正常工作的答案。 - dossy他们已经启用了通配符。因此,这个模式可以工作:
[main,qa,stage,master]*