Appearance
GitHub Copilot 的内容排除(Content Exclusion)功能允许在仓库、组织或企业层级配置哪些文件不允许 Copilot 访问,文件将不触发内联建议也不能用于 Chat 回答。规则使用 fnmatch 模式语法,支持通配符和多级目录匹配。
GitHub Copilot 内容排除配置:让 AI 不读取特定文件
适用范围与限制
重要:GitHub Copilot CLI、Copilot Cloud Agent 和 Chat 的 Agent 模式不支持内容排除。内容排除主要影响内联代码建议(inline suggestions)和 Ask/Plan 模式的 Chat。
内容排除规则可以在三个层级配置:
| 层级 | 适用范围 | 配置位置 |
|---|---|---|
| 仓库 | 单个仓库 | 仓库 Settings → Copilot → Content exclusion |
| 组织 | 所有组织成员 | 组织 Settings → Copilot → Content exclusion |
| 企业 | 所有 Copilot 用户 | 企业管理控制台 → Copilot 设置 |
较高层级的规则会叠加到较低层级,不是覆盖关系。
仓库级配置
- 进入仓库主页,点击 Settings
- 在左侧 "Code & automation" 分组中点击 Copilot
- 选择 Content exclusion
- 在输入框中输入要排除的文件路径
路径格式(每行一个):
yaml
# 排除特定文件(绝对路径)
- "/src/some-dir/kernel.rs"
# 排除所有名为 secrets.json 的文件(任意位置)
- "secrets.json"
# 排除以 secret 开头的所有文件
- "secret*"
# 排除所有 .cfg 文件
- "*.cfg"
# 排除 /scripts 目录及其所有子目录的文件
- "/scripts/**"组织级配置
组织配置使用 YAML 格式,支持按仓库名或仓库 URL 分组规则:
yaml
# 对所有仓库生效
"*":
- "**/.env"
- "**/credentials.json"
# 仅对 octo-repo 仓库生效
octo-repo:
- "/src/some-dir/kernel.rs"
# 对特定外部仓库生效(HTTPS URL)
https://github.com/primer/react.git:
- "secrets.json"
- "/src/**/temp.rb"
# SSH URL 格式
git@github.com:*/copilot:
- "/__tests__/**"
- "/scripts/*"
# GitLab 仓库也支持
git@gitlab.com:gitlab-org/gitlab-runner.git:
- "/main_test.go"
- "*.m[dk]"
- "**/security/**"Copilot 会匹配仓库,不管用 HTTPS 还是 SSH 克隆,只要 URL 对应同一个仓库。
fnmatch 模式语法速查
内容排除使用 fnmatch 模式,大小写不敏感:
| 模式 | 含义 | 示例 |
|---|---|---|
* | 匹配文件名中的任意字符(不含 /) | *.env 匹配所有 .env 文件 |
** | 匹配任意多级路径 | **/secrets/** 匹配任意位置的 secrets 目录 |
? | 匹配单个字符 | file?.txt 匹配 file1.txt |
[abc] | 匹配括号内的任意一个字符 | file[123].txt |
{a,b} | 匹配 a 或 b | {server,session}* |
验证排除是否生效
生效前需要重新加载 IDE:
- VS Code:命令面板 (
Ctrl+Shift+P) → 搜索 "reload" → 选择 Developer: Reload Window - JetBrains / Visual Studio:重启应用
- Vim / Neovim:重新打开文件
验证步骤:
- 在未排除的文件中确认 Copilot 建议正常出现
- 打开被排除的文件,不应出现内联建议
- 在 Copilot Chat 中引用被排除的文件,Chat 会提示"无法访问此文件"
常见问题
Q: .env 文件里有敏感 API Key,内容排除能防止 Copilot 读取吗?
A: 是的,配置 "**/.env" 后,任意目录下的 .env 文件都不会被 Copilot 读取和用于建议生成。但注意:内容排除不影响 Copilot CLI 和 Agent 模式,这两种模式不支持内容排除。
Q: 排除规则配置后多久生效?
A: 配置保存后立即生效于新的请求,但 IDE 中已打开的文件需要重新加载 IDE 才会应用新规则。
Q: 内容排除和 .gitignore 是一回事吗?
A: 不是。.gitignore 控制 git 不跟踪哪些文件,内容排除控制 Copilot 不访问哪些文件,两者独立配置。一个文件即使在 .gitignore 中也可能被 Copilot 读取,需要分别配置。