---
title: "内容排除"
description: "说明 GitHub Copilot 内容排除能保护什么、不能保护什么，以及如何配置、测试和审计。"
verifiedAt: "2026-05-06"
---

内容排除（content exclusion）解决的是“哪些内容不该被 Copilot 使用”。它应该在 rollout 前配置，而不是泄露、误用或 code review 之后再补。

> [!IMPORTANT]
> 内容排除是必要防线，但不是万能防线：Copilot CLI、Cloud Agent、IDE Chat 的 Agent Mode 目前都**不支持**内容排除。把"机密代码也写进了仓库"和"用内容排除挡 Copilot"看作同一道防线，是这一节最常见的错误。

## 1. 排除后会发生什么

GitHub 官方文档说明，内容被排除后：

- 受影响文件不会获得 inline suggestions。
- 受影响文件内容不会影响其他文件里的 inline suggestions。
- 受影响文件内容不会用于 Copilot Chat 响应。
- 受影响文件不会被 Copilot code review 审查。

```mermaid
flowchart TD
    File["敏感文件"] --> Exclusion["内容排除策略"]
    Exclusion --> Inline["Inline suggestions 不使用"]
    Exclusion --> Chat["Chat 不引用"]
    Exclusion --> Review["Copilot code review 不审查"]
    Exclusion --> Limit["CLI / coding agent / Agent mode 不支持"]

    style Exclusion fill:#fef3c7,stroke:#d97706,stroke-width:2px
    style Limit fill:#fee2e2,stroke:#dc2626,stroke-width:2px
```

## 2. 谁能配置

官方支持这些层级：

- Repository administrators：配置自己的仓库。
- Organization owners：配置组织级排除。
- Enterprise owners：配置企业级排除。
- Maintain role：可以查看仓库内容排除设置，但不能编辑。

企业级规则和组织级规则的区别很重要：企业级规则适用于企业中所有 Copilot users；组织级规则只影响由该组织分配 Copilot seat 的用户。

## 3. 该排除什么

优先排除：

- `.env`、密钥、证书、私钥、token。
- 客户数据、合同、财务数据。
- 专有算法、反作弊、风控策略。
- 内部安全策略和漏洞报告。
- 尚未公开的产品路线图。
- 训练数据、评测集、付费内容。

不要把内容排除当成懒惰的权限系统。真正不该被开发者读取的内容，本身就不应该出现在他们能访问的仓库或文件系统里。

## 4. 配置格式

仓库级配置是在仓库 Settings 的 Copilot content exclusion 页面填写路径，每行一个模式。

组织级或企业级可以按仓库和路径写模式。官方示例支持 `fnmatch` 风格匹配。

```yaml
"*":
  - "**/.env"

octo-repo:
  - "/src/sensitive/**"

https://github.com/primer/react.git:
  - "secrets.json"
  - "/src/**/temp.rb"
```

写规则时保守一点：

- 先排除明确敏感的路径。
- 再排除敏感文件名模式。
- 避免大范围排除导致 Copilot 在正常工程文件里不可用。
- 每次变更都留审计记录。

## 5. 支持范围和限制

官方限制必须写清：

- GitHub website 和 GitHub Mobile 上的内容排除仍有 public preview 边界。
- IDE Chat 的 Edit mode 和 Agent mode 当前不支持内容排除。
- Copilot CLI 和 Copilot coding agent 不支持内容排除。
- 内容排除不适用于 symbolic links。
- 远程文件系统上的 repository 不适用。
- IDE 可能间接提供类型信息、hover 定义或 build 配置信息。
- 配置变更在已加载 IDE 中生效可能需要最多 30 分钟。

这意味着高风险内容不能只靠内容排除保护。要配合仓库权限、secret scanning、least privilege 和本地文件隔离。

## 6. 测试和审计

测试：

1. 打开未排除文件，确认 inline suggestion 正常出现。
2. 打开应被排除文件，做相同编辑，确认没有 suggestion。
3. 在 Chat 中只附加被排除文件，提问 `explain this file`。
4. 确认 Copilot 无法把该文件作为引用来源。

审计：

- 仓库或组织页面底部可以看到最近一次内容排除变更。
- 点击变更时间可以进入 audit log。
- `copilot.content_exclusion_changed` 事件可用于追踪变更。
- 如果 `excluded_paths` 被截断，需要展开看完整值。

<details>
<summary>深读：为什么内容排除不能替代仓库权限</summary>

内容排除只控制 Copilot 是否使用特定内容，不控制开发者是否能打开、复制、提交或通过其他工具读取该内容。

如果一个文件本身不应该被某个团队访问，就应该先解决仓库权限和数据摆放问题，再配置 Copilot 内容排除作为额外防线。
</details>

## 本章自检

1. 是否已经排除密钥、客户数据、专有算法和安全材料？
2. 是否知道哪些 Copilot 入口不支持内容排除？
3. 是否测试过排除规则生效？
4. 是否能从 audit log 追踪每次变更？
5. 是否避免把内容排除当成唯一权限控制？

通过标准：内容排除规则可解释、可测试、可审计，并且和仓库权限配合使用。

## 官方来源

- [Content exclusion for GitHub Copilot](https://docs.github.com/en/copilot/concepts/context/content-exclusion) —— GitHub 官方概念、支持范围和限制。
- [Excluding content from GitHub Copilot](https://docs.github.com/en/copilot/how-tos/configure-content-exclusion/exclude-content-from-copilot) —— GitHub 官方配置和测试流程。
- [Reviewing changes to content exclusions](https://docs.github.com/en/copilot/managing-copilot/configuring-and-auditing-content-exclusion/reviewing-changes-to-content-exclusions-for-github-copilot) —— GitHub 官方审计流程。

## 接下来去哪

<Cards>
  <Card title="访问和策略" description="内容边界之外，还要配置功能、隐私和模型策略。" href="/docs/github-copilot/official/08-security-governance/access-policies" />
  <Card title="MCP 与外部工具" description="外部工具接入时也要重新确认内容和权限边界。" href="/docs/github-copilot/official/07-mcp" />
</Cards>
