---
title: Glob模式过滤器的工作原理
description: Code2Prompt如何使用包含(-i)和排除(-e)glob来决定保留或丢弃哪些文件。
---

Code2Prompt 使用 glob 模式来包含或排除文件和目录，工作方式类似于 tree 或 grep 等工具。它允许您传递两个独立的 glob 模式*列表*：

- **包含列表** (`--include` 或 `-i`) - "这些模式允许文件"
- **排除列表** (`--exclude` 或 `-e`) - "这些模式禁止文件"

Code2prompt 必须为项目中的每个文件决定是保留还是丢弃。本页面解释了规则以及背后的设计选择。

---

## 1. 集合和符号

在整个解释过程中，我们使用通常的集合符号

| 符号                              | 含义                               |
| --------------------------------- | ---------------------------------- |
| $A$                               | 匹配**至少一个**包含模式的文件集合 |
| $B$                               | 匹配**至少一个**排除模式的文件集合 |
| $\Omega$                          | 整个项目树（_全集_）               |
| $C = A \cap B$                    | 匹配两个列表的文件（_重叠_）       |
| $D = \Omega \setminus (A \cup B)$ | 不匹配任何列表的文件               |

---

## 2. 四种情况

### 四种情况概览

| 包含列表 | 排除列表 | 保留的文件 |
| -------- | -------- | ---------- |
| A = ∅    | B = ∅    | Ω          |
| A = ∅    | B ≠ ∅    | ¬B         |
| A ≠ ∅    | B = ∅    | A          |
| A ≠ ∅    | B ≠ ∅    | A \ B      |

1. **没有包含列表，没有排除列表**

   如果没有指定模式，则保留所有文件 (`Ω`)。

2. **仅排除列表**

   在这种情况下，Code2Prompt 充当黑名单，删除匹配排除模式的文件 (` Ω \ B = ¬B`)。

3. **仅包含列表**

   如果仅指定包含列表，Code2Prompt 充当白名单，仅保留匹配包含模式的文件 (`A`)。

4. **包含*和*排除列表**

   如果同时指定了两个列表，Code2Prompt 保留匹配包含模式的文件，但删除匹配排除模式的文件 (`A \ B`)。

---

## 3. 关于重叠的更多信息

当两个列表都存在时 (`A ≠ ∅`, `B ≠ ∅`)，对于重叠 `C` 和其余部分 `D`，
您有四种逻辑可能性。

| 需要 `C`？ | 需要 `D`？ | 合理吗？                                         |
| ---------- | ---------- | ------------------------------------------------ |
| 否         | 否         | 默认行为 (`A \ B`)                               |
| 是         | 否         | 与情况 3 相同的行为 (`A`)                        |
| 否         | 是         | 令人惊讶（"丢弃我请求的 `C`，保留我没有请求的"） |
| 是         | 是         | 与情况 1 相同的行为 (`Ω`)                        |

正是由于这个原因，`--include-priority` 选项被删除了。因为这将与只有包含列表（情况 3）的结果相同。

## 4. 快速参考表

| 想要保留…                              | 使用             |
| -------------------------------------- | ---------------- |
| 一切                                   | 无 `-i`，无 `-e` |
| 除某些模式*之外*的一切                 | 仅 `-e`          |
| *仅*匹配模式的内容                     | 仅 `-i`          |
| 匹配 `-i` 的内容，减去匹配 `-e` 的内容 | `-i` **和** `-e` |

---

这种设计保持了心理模型的简单性：

- 包含列表一旦存在就是白名单。
- 排除列表是叠加在上面的黑名单。
- 重叠部分默认被丢弃
