Skip to content

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 设置

较高层级的规则会叠加到较低层级,不是覆盖关系。

仓库级配置

  1. 进入仓库主页,点击 Settings
  2. 在左侧 "Code & automation" 分组中点击 Copilot
  3. 选择 Content exclusion
  4. 在输入框中输入要排除的文件路径

路径格式(每行一个):

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:重新打开文件

验证步骤:

  1. 在未排除的文件中确认 Copilot 建议正常出现
  2. 打开被排除的文件,不应出现内联建议
  3. 在 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 读取,需要分别配置。