# Glob 与 .gitignore 测试器

用路径列表测试 glob 模式和 .gitignore 规则，查看哪些路径匹配以及由哪条规则匹配。

https://codeknife.dev/zh/glob-ceshi/

## 功能

用路径列表测试 glob 模式和 `.gitignore` 规则。每条路径都会标出匹配与否，并在旁边显示起作用的模式，方便你了解 `src/lib/util.test.ts` 为什么被包含或排除。

## 使用方法

1. 在**路径**中每行粘贴一个路径，或拖入文本文件。
2. 在**模式**中每行写一个模式。以 `#` 开头的行是注释。
3. 选择 **Glob**、**Bash** 或 **Gitignore**，并显示所有路径、仅匹配项或仅不匹配项。
4. 复制结果。

## 示例

使用模式 `src/**/*.ts` 和 `!**/*.test.ts` 时，路径 `src/lib/util.ts` 匹配，而 `src/lib/util.test.ts` 因排除优先而不匹配。使用 `.gitignore` 规则 `*.log` 和 `!keep.log` 时，`app.log` 被忽略，`keep.log` 不被忽略。

## 须知

- `*` 只在一个目录内，`**` 可跨目录，`?`、`[ab]` 和 `{a,b}` 与 picomatch 中一致。
- `.env` 这类点文件只有在打开**包含点文件**或模式写明点时才会匹配。
- 在 Glob 和 Bash 中，以 `!` 开头的模式会排除其他模式匹配到的内容。在 Gitignore 中与 Git 一样，最后一条匹配的规则生效。
- Bash 像没有 `globstar` 的 shell 那样把 `**` 当作普通 `*`。
- 路径按文本匹配，不会从磁盘读取任何内容。

## 三种语法是什么意思？

Glob 是大多数构建工具使用的 picomatch 语法：* 只在一个目录内，** 可跨目录，{a,b} 这样的花括号、[ab] 这样的字符类和 ? 也可用。Bash 像没有 globstar 的 shell 那样把 ** 当作普通 *。Gitignore 遵循 .gitignore 规则：末尾的 / 表示目录，开头的 / 锚定到根目录，后面的 ! 规则会重新包含先前规则忽略的内容。

## 常见问题

### 路径旁边显示的是哪条规则？

第一个匹配的模式。在 glob 和 bash 中，被排除（以 ! 开头的模式）剔除的路径会显示该排除项。在 gitignore 中显示忽略它的规则。

### 为什么 * 不匹配以点开头的文件？

除非模式写明了点，否则 glob 会跳过点文件。打开“包含点文件”后，* 和 ? 就能匹配它们，如同 bash 的 dotglob。.gitignore 没有这个开关。

### 这个工具会把我的路径发送到别处吗？

不会。一切都在你的浏览器中完成。你输入的内容不会发送到我们的服务器。