关于 Copilot 的内容排除
您可以使用内容排除来配置 Copilot 以忽略某些文件。当您从 Copilot 中排除内容时
- 受影响的文件中将无法使用代码补全。
- 受影响文件中的内容不会为其他文件中的代码补全建议提供信息。
- 受影响文件中的内容不会为 GitHub Copilot 聊天的回复提供信息。
谁可以配置内容排除
代码库管理员和组织所有者可以配置内容排除。
- **代码库管理员**可以为其自己的代码库排除内容。这会影响在这些特定代码库中工作的任何 Copilot 用户。
- **组织所有者**可以为通过其组织分配了 Copilot 许可证的用户排除内容。
内容排除的可用性
工具 | 代码补全支持 | Copilot 聊天支持 |
---|---|---|
Visual Studio | ||
Visual Studio Code | ||
JetBrains IDE | ||
Vim/Neovim | 不适用 | |
Xcode | 不适用 | |
Azure Data Studio | 不适用 | |
GitHub 网站 | 不适用 | |
GitHub 移动应用 | 不适用 |
内容排除的限制
如果 IDE 在非排除文件中提供了信息,Copilot 可能会使用来自排除文件的语义信息。此类内容的示例包括用于代码中符号的类型信息和悬停定义。
发送到 GitHub 的数据
配置内容排除后,客户端(例如,VS Code 的 Copilot 扩展)会将当前代码库 URL 发送到 GitHub 服务器,以便服务器可以将正确的策略返回给客户端。这些 URL 不会记录在任何地方。
为您的代码库配置内容排除
您可以使用您的代码库设置来指定 GitHub Copilot 应忽略的代码库中的内容。
-
在 GitHub 上,导航到代码库的主页。
-
在您的代码库名称下,单击 **设置**。如果您看不到“设置”选项卡,请选择****下拉菜单,然后单击**设置**。
-
在侧边栏的“代码和自动化”部分,单击** Copilot**。
如果您的代码库从其父组织继承任何排除项,您会在页面顶部看到一个灰色框,其中包含这些排除项的详细信息。您无法编辑这些设置。
-
在“要在此代码库中排除的路径”后的框中,输入应从 Copilot 中排除的文件的路径。
使用格式:
- "/PATH/TO/DIRECTORY/OR/FILE"
,每行一个路径。您可以通过以#
开头来添加注释。提示
您可以使用 fnmatch 模式匹配表示法来指定文件路径。模式不区分大小写。请参阅 ruby-doc.org 文档中的“File”。
代码库设置中指定的路径示例
# 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 with `secret` anywhere in this repository. - "secret*" # Ignore files whose names end with `.cfg` anywhere in this repository. - "*.cfg" # Ignore all files in or below the `/scripts` directory of this repository. - "/scripts/**"
- "/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 with `secret` anywhere in this repository.
- "secret*"
# Ignore files whose names end with `.cfg` anywhere in this repository.
- "*.cfg"
# Ignore all files in or below the `/scripts` directory of this repository.
- "/scripts/**"
为您的组织配置内容排除
您可以使用您的组织设置来指定 GitHub Copilot 应忽略的文件。这些文件可以在 Git 代码库中,也可以位于不受 Git 控制的文件系统的任何位置。
-
在 GitHub 的右上角,选择您的个人资料照片,然后单击 您的组织.
-
在组织旁边,单击**设置**。
-
在左侧边栏中,单击** Copilot**,然后单击**内容排除**。
-
在“要排除的代码库和路径”后的框中,输入应从 Copilot 中排除的文件的详细信息。
要排除任何位置(在 Git 代码库中或其他位置)的文件,请输入
"*":
,后跟要排除的文件或文件的路径。如果要指定多个文件路径模式,请在每一行列出每个模式。要从 Copilot 中排除 Git 代码库中的文件,请在一行中输入对代码库的引用,后跟代码库中位置的路径,每个路径占一行。使用以下格式,将
REPOSITORY-REFERENCE
替换为包含要排除的文件的代码库的引用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
部分。对于 Azure DevOps,在指定
REPOSITORY-REFERENCE
时,您可以使用新的 (dev.azure.com) 或旧的 (visualstudio.com) 主机格式,Copilot 会匹配它们,无论本地克隆存储库时使用了哪个主机。提示
您可以使用 fnmatch 模式匹配表示法来指定文件路径。模式不区分大小写。请参阅 ruby-doc.org 文档中的“File”。
组织设置中的存储库和路径示例
# Ignore all `.env` files from all file system roots (Git and non-Git). # For example, this excludes `REPOSITORY-PATH/.env` and also `/.env`. # 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 with `server` or `session` anywhere in this repository. - "{server,session}*" # Ignore any files with names ending with `.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/**"
"*":
- "**/.env"
忽略所有文件系统根目录(Git 和非 Git)中的所有.env
文件。例如,这会排除REPOSITORY-PATH/.env
和/.env
。这也可以在一行中写成
"*": ["**/.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
的文件。
[email protected]:*/copilot:
在任何 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}*"
忽略此存储库中任何名称以server
或session
开头的文件。
- "*.m[dk]"
忽略此存储库中任何名称以.md
或.mk
结尾的文件。
- "**/package?/*"
忽略此存储库中直接位于例如packages
或packaged
等目录中的文件。
- "**/security/**"
忽略此存储库中任何security
目录中或其下的文件。
# Ignore all `.env` files from all file system roots (Git and non-Git).
# For example, this excludes `REPOSITORY-PATH/.env` and also `/.env`.
# 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 with `server` or `session` anywhere in this repository.
- "{server,session}*"
# Ignore any files with names ending with `.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/**"
测试内容排除更改
您可以使用您的 IDE 来确认您对内容排除的更改是否按预期工作。
将内容排除更改传播到您的 IDE
添加或更改内容排除后,最多可能需要 30 分钟才能在已加载设置的 IDE 中生效。如果您不想等待,您可以按照以下说明手动重新加载内容排除设置。
- 对于 JetBrains IDE 和 Visual Studio,请通过关闭并重新打开应用程序来重新加载内容排除设置。
- 对于 Visual Studio Code,请使用以下步骤重新加载内容排除设置
- 访问命令面板。例如,按Shift+Command+P(Mac)/Ctrl+Shift+P(Windows/Linux)。
- 键入:
reload
。 - 选择开发者:重新加载窗口。
- 对于 Vim/Neovim,每次打开文件时都会自动从 GitHub 获取内容排除。
测试您的内容排除
根据您使用的 IDE,有几种不同的方法可以测试您的内容排除。
- 打开您预计会受到内容排除影响的文件。
- 使用以下一种或多种技术来测试内容是否被排除
- 在 JetBrains IDE、Visual Studio 和 Visual Studio Code 中,检查状态栏中的 Copilot 图标。如果 Copilot 内容排除适用于该文件,则 Copilot 图标将带有斜线。将鼠标悬停在图标上以查看组织或父存储库是否为该文件禁用了 Copilot。
- 在 Vim/Neovim 中,开始在文件中键入。如果 GitHub Copilot 在您键入时不再提供内联建议,则该文件已被排除。
- 您也可以在 Copilot Chat 中测试内容排除。打开 Copilot Chat 窗口,并向 Copilot Chat 提问关于被排除文件的问题。如果您的内容已成功排除,Copilot 将无法回答您的问题,并将解释由于内容排除规则,某些文件已从对话中排除。