demo/GLOB.md
2026-07-22 16:34:40 +08:00

100 行
2.9 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 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)