跳至主要内容

配置 GitHub Copilot 的内容排除

您可以阻止指定文件被用于为 GitHub Copilot 提供代码补全建议。GitHub Copilot 将在排除的文件中不可用。

谁可以使用此功能?

仓库管理员和组织所有者可以管理 GitHub Copilot 的内容排除设置。

拥有仓库“维护”角色的人员可以查看该仓库的内容排除设置,但无法更改这些设置。有关更多信息,请参阅“组织的仓库角色”。

此功能适用于拥有 Copilot Business 订阅的组织和企业帐户,以及拥有 Copilot Enterprise 订阅的企业帐户。

注意

  • 从 GitHub Copilot 中排除内容目前处于公开测试阶段,可能会发生变化。
  • 此功能支持 Visual Studio、Visual Studio Code、JetBrains IDE 和 neovim 中的 GitHub Copilot 代码补全。它也支持 VS Code 中的 GitHub Copilot Chat。有关支持的 JetBrains IDE 的详细信息,请参阅 "在您的编辑器中使用 GitHub Copilot 代码建议."

关于配置内容排除

您可能希望阻止某些文件对 GitHub Copilot 可用。您可以配置 GitHub Copilot 使其忽略这些文件。您可以通过在仓库或组织的设置中指定要排除的内容的路径来实现此目的。

当您指定内容排除时,它将产生两种影响

  • 受影响文件的內容将不会被 GitHub Copilot 用于为其他文件中的代码补全建议提供信息。
  • GitHub Copilot 代码补全将不可用于受影响的文件。

在您添加或更改内容排除后,可能需要长达 30 分钟才能在已加载设置的 IDE 中生效。您可以将更改应用于您自己的 IDE,强制其重新加载内容排除设置。有关更多信息,请参阅 "将内容排除更改传播到您的 IDE."

限制

  • 除了 Visual Studio Code 之外,GitHub Copilot Chat 目前不支持内容排除。
  • 当您在问题中使用 @github Copilot 聊天参与者时,不会在 Visual Studio Code 中的 GitHub Copilot Chat 和 Visual Studio 中的 Copilot Chat 中应用内容排除。
  • 如果 IDE 在非排除文件中提供了信息,Copilot 可能会使用来自排除文件的语义信息。此类内容的示例包括代码中使用的符号的类型信息和悬停定义。

您可以排除什么?

在仓库设置中指定内容排除时,你只能排除该仓库中的文件。

在组织设置中指定内容排除时,你可以排除托管在 GitHub.com 上的任何基于 Git 的仓库中的文件,或者使用以下任何语法访问的任何地方的文件。

http[s]://host.xz[:port]/path/to/repo.git/

git://host.xz[:port]/path/to/repo.git/

[user@]host.xz:path/to/repo.git/

ssh://[user@]host.xz[:port]/path/to/repo.git/

注意:请注意,任何拥有 Copilot Business 订阅的 GitHub 组织的设置都可以排除内容。被排除的文件可能位于不属于定义排除的组织的仓库中。被排除的文件也可能位于未托管在 GitHub 上的基于 Git 的仓库中。

谁会受到内容排除设置的影响?

GitHub Copilot 内容排除设置不适用于所有使用 Copilot 的用户。

内容排除设置仅适用于已获得 GitHub Copilot Business 或 GitHub Copilot Enterprise 订阅的席位,并且是配置内容排除的同一组织的成员的用户。可以访问指定文件的其他用户不会受到内容排除的影响,并且仍然会看到代码补全建议。

所有排除,无论是在仓库设置中定义还是在组织设置中定义,都适用于已获得 Copilot Business 订阅的席位的组织的所有成员。

发送到 GitHub 的数据

配置内容排除后,客户端(例如,VS Code 的 Copilot 扩展)会将当前仓库 URL 发送到 GitHub 服务器,以便服务器可以将正确的策略返回给客户端。以这种方式发送到服务器的 URL 不会在任何地方记录。

为你的仓库配置内容排除

你可以使用你的仓库设置来指定你仓库中 GitHub Copilot 应该忽略的内容。

  1. 在 GitHub.com 上,导航到仓库的主页。

  2. 在你的仓库名称下,点击 设置。如果你看不到“设置”选项卡,请选择下拉菜单,然后点击设置

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,点击 ** Copilot**。

    如果您的仓库从其父组织继承了任何排除项,您将在页面顶部看到一个灰色框,其中包含这些排除项的详细信息。您无法编辑这些设置。

  4. 在“要在此仓库中排除的路径”下的框中,输入要从 Copilot 中排除的文件的路径。

    Screenshot of the "Paths to exclude" text box in the repository settings for Copilot.

    使用以下格式:- "/PATH/TO/DIRECTORY/OR/FILE",每个路径占一行。您可以通过在行首添加 # 来添加注释。

    您可以使用 fnmatch 模式匹配符号来指定文件路径。有关更多信息,请参阅 ruby-doc.org 文档中的“File”。

    **注意**:模式不区分大小写。

仓库设置中指定路径的示例

YAML
- "/src/some-dir/kernel.rs"

忽略此仓库中的 /src/some-dir/kernel.rs 文件。

- "secrets.json"

忽略此仓库中任何位置名为 secrets.json 的文件。

- "secret*"

忽略此仓库中任何位置名称以 secret 开头的所有文件。

- "*.cfg"

忽略此仓库中任何位置名称以 .cfg 结尾的文件。

- "/scripts/**"

忽略此仓库中 /scripts 目录及其以下的所有文件。

# Ignore the `/src/some-dir/kernel.rs` file in this repository.
- "/src/some-dir/kernel.rs"

# Ignore files called `secrets.json` anywhere in this repository.
- "secrets.json"

# Ignore all files whose names begin `secret` anywhere in this repository.
- "secret*"

# Ignore files whose names end `.cfg` anywhere in this repository.
- "*.cfg"

# Ignore all files in or below the `/scripts` directory of this repository.
- "/scripts/**"

为您的组织配置内容排除项

您可以使用您的组织设置来指定 GitHub Copilot 应该忽略的任何仓库中的内容。

  1. 在 GitHub 的右上角,选择您的个人资料照片,然后点击 您的组织.

  2. 在组织旁边,点击 **设置**。

  3. 在左侧边栏中,点击 ** Copilot**,然后点击 **内容排除**。

  4. 在“要排除的仓库和路径”下的框中,输入 Copilot 应该被排除的位置的详细信息。

    对于您想要从 Copilot 中排除文件的每个仓库,在一行中输入对仓库的引用,然后输入仓库中位置的路径,每个路径单独占一行。使用以下格式

    REPOSITORY-REFERENCE:
      - "/PATH/TO/DIRECTORY/OR/FILE"
      - "/PATH/TO/DIRECTORY/OR/FILE"
      - ...
    

    仓库可以使用各种协议进行引用。您可以对 REPOSITORY-REFERENCE 使用以下任何语法,Copilot 将匹配它们,无论仓库是在本地如何克隆的

    http[s]://host.xz[:port]/path/to/repo.git/
    
    git://host.xz[:port]/path/to/repo.git/
    
    [user@]host.xz:path/to/repo.git/
    
    ssh://[user@]host.xz[:port]/path/to/repo.git/
    

    注意:

    • REPOSITORY-REFERENCE 中的 user@:port 部分在计算要忽略的仓库路径时会被忽略。
    • 每个仓库引用可以包含一个 * 通配符。例如,https://github.com/octo-org/* 匹配 octo-org 组织中的所有仓库。
    • Azure DevOps URL 有额外的支持。有关更多信息,请参阅“Azure DevOps REPOSITORY-REFERENCE 支持”。

    您可以使用 fnmatch 模式匹配符号来指定文件路径。有关更多信息,请参阅 ruby-doc.org 文档中的“File”。

    **注意**:模式不区分大小写。

组织设置中仓库和路径的示例

YAML
"*":
  - "**/.env"

忽略任何仓库中任何路径下的所有 .env 文件。此设置适用于所有仓库,而不仅仅是 GitHub.com 上的仓库。这也可以在一行中写成

"*": ["**/.env"]

octo-repo:

在该组织的 octo-repo 仓库中

  - "/src/some-dir/kernel.rs"

忽略 /src/some-dir/kernel.rs 文件。

https://github.com/primer/react.git:

在 GitHub 上的 primer/react 仓库中

  - "secrets.json"

忽略此仓库中任何位置名为 secrets.json 的文件。

  - "/src/**/temp.rb"

忽略 /src 目录及其子目录中名为 temp.rb 的文件。

在任何 GitHub 组织的 copilot 仓库中

  - "/__tests__/**"

忽略 /__tests__ 目录及其子目录中的所有文件。

  - "/scripts/*"

忽略 /scripts 目录中的所有文件。

[email protected]:gitlab-org/gitlab-runner.git:

在 GitLab 上的 gitlab-org/gitlab-runner 仓库中

  - "/main_test.go"

忽略 /main_test.go 文件。

  - "{server,session}*"

忽略此仓库中所有名称以 serversession 开头的文件。

  - "*.m[dk]"

忽略此仓库中所有名称以 .md.mk 结尾的文件。

  - "**/package?/*"

忽略此仓库中所有直接位于 packagespackaged 等目录中的文件。

  - "**/security/**"

忽略此仓库中所有 security 目录及其子目录中的文件。

# Ignore all `.env` files at any path, in any repository.
# This setting applies to all repositories, not just to those on GitHub.com.
# This could also have been written on a single line as:
#
# "*": ["**/.env"]
"*":
  - "**/.env"

# In the `octo-repo` repository in this organization:
octo-repo:
  # Ignore the `/src/some-dir/kernel.rs` file.
  - "/src/some-dir/kernel.rs"

# In the `primer/react` repository on GitHub:
https://github.com/primer/react.git:
  # Ignore files called `secrets.json` anywhere in this repository.
  - "secrets.json"
  # Ignore files called `temp.rb` in or below the `/src` directory.
  - "/src/**/temp.rb"

# In the `copilot` repository of any GitHub organization:
[email protected]:*/copilot:
  # Ignore any files in or below the `/__tests__` directory.
  - "/__tests__/**"
  # Ignore any files in the `/scripts` directory.
  - "/scripts/*"

# In the `gitlab-org/gitlab-runner` repository on GitLab:
[email protected]:gitlab-org/gitlab-runner.git:
  # Ignore the `/main_test.go` file.
  - "/main_test.go"
  # Ignore any files with names beginning `server` or `session`, anywhere in this repository.
  - "{server,session}*"
  # Ignore any files with names ending `.md` or `.mk`, anywhere in this repository.
  - "*.m[dk]"
  # Ignore files directly within directories such as `packages` or `packaged`, anywhere in this repository.
  - "**/package?/*"
  # Ignore files in or below any `security` directories, anywhere in this repository.
  - "**/security/**"

查看内容排除设置的更改

如果您是组织所有者,您可以查看对内容排除所做的任何更改。

  1. 打开组织设置中的“内容排除”页面(此处描述),或打开仓库设置中的“内容排除”页面(此处描述)。

  2. 滚动到页面底部。

    您将看到最后更改设置的人员姓名以及他们更改设置的时间信息。

  3. 点击上次更改的时间。

    Screenshot of the last edited information. The time of change link is highlighted with a dark orange outline.

    注意:只有组织所有者才能点击上次更改的时间。

    将显示组织的“审计日志”页面,其中显示了最近记录的 copilot.content_exclusion_changed 操作。

    如果您从仓库设置页面点击进入,则审计日志将被过滤,只显示该仓库内容排除的更改。

  4. 点击每个条目末尾的省略号 (...) 以查看更多详细信息。

    如果“excluded_paths”条目被截断,则将鼠标悬停在截断的值上以显示完整条目。这将显示更改保存后排除设置的内容。

    Screenshot of audit log details for the 'copilot.content_exclusion_changed' action. The ellipsis button is highlighted.

检查设置更改的效果

更改 Copilot 的内容排除后,您可以检查该设置是否阻止 Copilot 在指定文件中建议代码。

要确认 Copilot 是否已为某个文件禁用,请在编辑器中打开该文件并开始键入一行代码,例如注释。通常,您会在键入时看到 Copilot 的代码补全建议。如果 Copilot 被内容排除禁用,则不会提供代码补全建议,并且该文件的内容不会用于在其他文件中生成建议。

检查 IDE 中的设置更改

如果您在 Visual Studio、VS Code 或受支持的 JetBrains IDE 中工作,Copilot 图标会指示 Copilot 何时因内容排除而被禁用。

  1. 打开您预计会受到内容排除影响的文件。

    如果 Copilot 内容排除适用于此文件,则状态栏中的 Copilot 图标将带有斜线。

  2. 将鼠标悬停在该图标上。弹出消息会告诉您是组织还是父存储库禁用了此文件的 Copilot。

    Screenshot of the Copilot disabled popup in the VS Code toolbar.

**注意**:在 Visual Studio 和 VS Code 中,您可以显示 Copilot 扩展的日志以查看内容排除的详细信息,而无需将鼠标悬停在 Copilot 图标上。有关更多信息,请参阅“查看您环境中的 GitHub Copilot 日志”。

将内容排除更改传播到您的 IDE

如果您在 Neovim 中工作,则每次打开文件时都会从 GitHub 获取内容排除。但是,如果您在 Visual Studio、VS Code 或受支持的 JetBrains IDE 中工作,您可能需要等待长达 30 分钟才能看到设置更改的效果。或者,您可以手动将内容排除设置重新加载到您的 IDE 中。

要将内容排除重新加载到 Visual Studio 中,请关闭并重新打开应用程序。

要将内容排除重新加载到 VS Code 中

  1. 访问命令面板。例如,通过按 Shift+Command+P(Mac)/ Ctrl+Shift+P(Windows/Linux)。
  2. 键入:reload
  3. 选择**开发者:重新加载窗口**。

要将内容排除重新加载到您的 JetBrains IDE 中,请关闭并重新打开应用程序,或者注销 GitHub 然后重新登录,如下所示。

  1. 单击状态栏中的 Copilot 图标,然后选择**从 GitHub 注销**。
  2. 状态栏中的 Copilot 图标现在将带有斜线。单击它并选择**登录 GitHub**。
  3. 将显示“登录 GitHub”消息,其中显示设备代码。单击**复制并打开**。
  4. 在“设备激活”页面上,粘贴设备代码并单击**继续**。
  5. 在下一页,点击授权 GitHub Copilot 插件

Azure DevOps REPOSITORY-REFERENCE 支持

REPOSITORY-REFERENCE 语法中,新的 (dev.azure.com) 和旧的 (visualstudio.com) Azure DevOps 格式都被视为等效。在指定 REPOSITORY-REFERENCE 时,您可以使用任一主机,Copilot 会匹配它们,无论本地克隆存储库时使用了哪个主机。

进一步阅读