# Glob 模式语法说明(分支过滤 / 名称匹配) Source Git(及常见 Git 托管)里,「分支过滤」「分支保护名称」等字段使用 **glob** 模式匹配。本文提炼常用写法,方便在 Web 钩子等场景直接查阅。 --- ## 一句话 用通配符描述「匹配哪些名字」:留空或只写 `*` / `**` 表示**全部**;写具体规则则只匹配命中的分支(或路径)。 --- ## Web 钩子:分支过滤 适用于:**推送**、**创建分支**、**删除分支** 等带 Git 引用的事件。 | 填写内容 | 效果 | |----------|------| | 空,或 `*`,或 `**` | 所有分支相关事件都会投递 | | `main` | 仅 `main` | | `release*` | `release`、`release-1`、`release/v2` 等(`*` 不跨 `/` 时依实现;本库 `*` 不匹配分隔符,见下) | | `{main,develop}` | `main` 或 `develop` | | `{main,release/*}` | `main`,或 `release/` 下一级名称 | | `refs/tags/v*` | 也可写完整 ref(标签等) | **说明:** 工单、合并请求评论等**不带分支 ref** 的事件,一般会忽略分支过滤,仍按你勾选的事件类型投递。 --- ## 常用符号 | 符号 | 含义 | 例子 | 能匹配 | 不能匹配 | |------|------|------|--------|----------| | `*` | 一段字符(不含路径分隔符 `/`) | `release*` | `release`、`release-1` | 跨多级目录时需配合 `**` | | `**` | 任意字符(可跨分隔符) | `api.**.com`(若以 `.` 为分隔) | 多层 | — | | `?` | 单个非分隔符字符 | `?at` | `cat`、`fat` | `at` | | `[abc]` | 字符集合之一 | `[abc]at` | `cat`、`bat` | `fat` | | `[!abc]` | 不在集合中的字符 | `[!abc]at` | `fat` | `cat` | | `[a-c]` | 字符范围 | `[a-c]at` | `cat`、`bat` | `fat` | | `{a,b,c}` | 多选一(逗号分隔,无空格) | `{main,develop}` | `main` 或 `develop` | `master` | | `\` | 转义后面的特殊字符 | 字面量 `*` 时需要转义 | — | — | --- ## 推荐示例(钩子分支过滤) ```text main ``` 只监听 `main`。 ```text {main,develop,release/*} ``` 监听 `main`、`develop`,以及 `release/` 下的分支(如 `release/v1`)。 ```text feature/* ``` 只监听 `feature/` 下一层分支名。 ```text * ``` 所有分支(与留空类似,按产品实现为准;Source Git 钩子说明:空或 `*` 表示全部)。 --- ## 分支保护等场景的补充例子 这些字段同样用 glob,可写路径风格: ```text main release/** .drone.yml /docs/**/*.txt ``` 多个文件模式时,有的界面用**分号** `;` 分隔,请以该字段旁的说明为准。 --- ## 注意 1. `{a, b}` 里**不要**随便加空格;应写成 `{a,b}`。 2. 需要匹配字面量 `*`、`?`、`{` 等时,用 `\` 转义。 3. 本文面向产品使用;常用写法见上文表格与示例即可。 --- ## 相关 - Source Git:https://git.dkfile.net/ - 本演示仓说明:[README.md](./README.md)