Skip to main content

Excluding content from GitHub Copilot

You can prevent Copilot from accessing certain content.

Who can use this feature?

Repository administrators, organization owners, and enterprise owners can manage content exclusion settings. People with the "Maintain" role for a repository can view, but not edit, content exclusion settings for that repository.

Organizations and enterprises with a subscription to GitHub Copilot Business or GitHub Copilot Enterprise.

About content exclusions for Copilot

Note

Excluding content from GitHub Copilot is currently in public preview and is subject to change.

You can use content exclusions to configure Copilot to ignore certain files. When you exclude content from Copilot:

  • Code completion will not be available in the affected files.
  • The content in affected files will not inform code completion suggestions in other files.
  • The content in affected files will not inform GitHub Copilot Chat's responses.

Who can configure content exclusion

Repository administrators, organization owners, and enterprise owners can configure content exclusion.

  • Repository administrators can only exclude content for their own repositories. This affects Copilot users working within those specific repositories.
  • Organization owners can exclude content for users assigned a Copilot seat through their organization.

Note

In the current public preview release, organization-level settings for content exclusion typically apply to all Copilot users in the enterprise. This will change with the general availability (GA) release of this feature on November 8th, 2024.

Before November 8th:

  • If enterprise owners do not set rules: Organization-level rules will continue to apply to all users across the enterprise, functioning as they do now, until November 8th.
  • If enterprise owners set a rule: Once enterprise-level rules are applied, organization-level rules will only apply to users who are assigned a Copilot seat from the organization where the rule is set.

After November 8th:

  • Organization-level rules will no longer apply enterprise-wide. They will be limited to users who are assigned a Copilot seat from the organization where the rule is set.
  • Enterprise owners can apply exclusion rules to all Copilot users in the enterprise.

Availability of content exclusions

ToolCode completion supportCopilot Chat support
Visual Studio
Visual Studio Code
JetBrains IDEs
Vim/NeovimNot applicable
Azure Data StudioNot applicable
The GitHub websiteNot applicable

Limitations of content exclusions

  • In Copilot Chat in Visual Studio Code and Visual Studio, content exclusions are not applied when you use the @github chat participant in your question.
  • It's possible that Copilot may use semantic information from an excluded file if the information is provided by the IDE in a non-excluded file. Examples of such content include type information and hover-over definitions for symbols used in code.

Data sent to GitHub

After you configure content exclusion, the client (for example, the Copilot extension for VS Code) sends the current repository URL to the GitHub server so that the server can return the correct policy to the client. These URLs are not logged anywhere.

Configuring content exclusions for your repository

You can use your repository settings to specify content in your repository that GitHub Copilot should ignore.

  1. On GitHub, navigate to the main page of the repository.

  2. Under your repository name, click Settings. If you cannot see the "Settings" tab, select the dropdown menu, then click Settings.

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

  3. In the "Code & automation" section of the side bar, click Copilot.

    If your repository inherits any exclusions from organizations in the same enterprise, you'll see one or more gray boxes at the top of the page containing details of these exclusions. You cannot edit these settings.

  4. In the box following "Paths to exclude in this repository," enter the paths to files from which Copilot should be excluded.

    Use the format: - "/PATH/TO/DIRECTORY/OR/FILE", with each path on a separate line. You can add comments by starting a line with #.

    Tip

    You can use fnmatch pattern matching notation to specify file paths. Patterns are case insensitive. See "File" in the ruby-doc.org documentation.

Example of paths specified in the repository settings

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

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

- "secrets.json"

Ignore files called secrets.json anywhere in this repository.

- "secret*"

Ignore all files whose names begin with secret anywhere in this repository.

- "*.cfg"

Ignore files whose names end with .cfg anywhere in this repository.

- "/scripts/**"

Ignore all files in or below the /scripts directory of this repository.

# 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/**"

Configuring content exclusions for your organization

You can use your organization settings to specify files that GitHub Copilot should ignore. The files can be within a Git repository or anywhere on the file system that is not under Git control.

  1. In the upper-right corner of GitHub, select your profile photo, then click Your organizations.

  2. Next to the organization, click Settings.

  3. In the left sidebar, click Copilot then click Content exclusion.

  4. In the box following "Repositories and paths to exclude," enter the details of files from which Copilot should be excluded.

    To exclude files located anywhere (within a Git repository or elsewhere), enter "*": followed by the path to the file, or files, you want to exclude. If you want to specify multiple file path patterns, list each pattern on a separate line.

    To exclude files in a Git repository from Copilot, enter a reference to the repository on one line, followed by paths to locations within the repository, with each path on a separate line. Use the following format, replacing REPOSITORY-REFERENCE with a reference to the repository that contains the files you'd like to exclude:

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

    Repositories can be referenced using various protocols. You can use any of the following syntaxes for REPOSITORY-REFERENCE and Copilot will match them regardless of how the repository was cloned locally:

    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/
    

    The user@ and :port parts of the REPOSITORY-REFERENCE are ignored in the calculation of which paths to ignore for a repository.

    For Azure DevOps, you can use the new (dev.azure.com) or old (visualstudio.com) host format when specifying REPOSITORY-REFERENCE, and Copilot will match them regardless of which host was used to clone the repository locally.

    Tip

    You can use fnmatch pattern matching notation to specify file paths. Patterns are case insensitive. See "File" in the ruby-doc.org documentation.

Example of repositories and paths in organization settings

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

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"]

octo-repo:

In the octo-repo repository in this organization:

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

Ignore the /src/some-dir/kernel.rs file.

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

In the primer/react repository on GitHub:

  - "secrets.json"

Ignore files called secrets.json anywhere in this repository.

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

Ignore files called temp.rb in or below the /src directory.

git@github.com:*/copilot:

In the copilot repository of any GitHub organization:

  - "/__tests__/**"

Ignore any files in or below the /__tests__ directory.

  - "/scripts/*"

Ignore any files in the /scripts directory.

git@gitlab.com:gitlab-org/gitlab-runner.git:

In the gitlab-org/gitlab-runner repository on GitLab:

  - "/main_test.go"

Ignore the /main_test.go file.

  - "{server,session}*"

Ignore any files with names beginning with server or session anywhere in this repository.

  - "*.m[dk]"

Ignore any files with names ending with .md or .mk anywhere in this repository.

  - "**/package?/*"

Ignore files directly within directories such as packages or packaged anywhere in this repository.

  - "**/security/**"

Ignore files in or below any security directories, anywhere in this repository.

# 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:
git@github.com:*/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:
git@gitlab.com: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/**"

Configuring content exclusions for your enterprise

As an enterprise owner, you can use the enterprise settings to specify files that GitHub Copilot should ignore. The files can be within a Git repository or anywhere on the file system that is not under Git control.

  1. In the top-right corner of GitHub, click your profile photo.
  2. Depending on your environment, click Your enterprise, or click Your enterprises then click the enterprise you want to view.
  3. On the left side of the page, in the enterprise account sidebar, click Policies.
  4. In the " Policies" section, click Copilot.
  5. Click the Content exclusion tab.
  6. Use paths to specify which content to exclude. See the previous section, "Configuring content exclusions for your organization."

Note

The key difference between setting content exclusion at the enterprise level and the organization level is that rules set at the enterprise level apply to all Copilot users in the enterprise, whereas the rules set by organization owners only apply to users who are assigned a Copilot seat by that organization.

Testing changes to content exclusions

You can use your IDE to confirm that your changes to content exclusions are working as expected.

Propagate content exclusion changes to your IDE

After you add or change content exclusions, it can take up to 30 minutes to take effect in IDEs where the settings are already loaded. If you don't want to wait, you can manually reload the content exclusion settings using the following instructions.

  • For JetBrains IDEs and Visual Studio, reload the content exclusion settings by closing and reopening the application.
  • For Visual Studio Code, use the following steps to reload the content exclusion settings:
    1. Access the Command Palette. For example, by pressing Shift+Command+P (Mac) / Ctrl+Shift+P (Windows/Linux).
    2. Type: reload.
    3. Select Developer: Reload Window.
  • For Vim/Neovim, content exclusions are automatically fetched from GitHub each time you open a file.

Test your content exclusions

There are a few different ways to test your content exclusions, depending on which IDE you're using.

  1. Open a file that you expect to be affected by your content exclusions.
  2. Use one or more of the following techniques to test if content is being excluded:
    • In JetBrains IDEs, Visual Studio, and Visual Studio Code, check the Copilot icon in the status bar. If a Copilot content exclusion applies to the file, the Copilot icon will have a diagonal line through it. Hover over the icon to see whether an organization or the parent repository disabled Copilot for the file.
    • In JetBrains IDEs, Visual Studio and Visual Studio Code, you can also test content exclusions in Copilot Chat. Open the Copilot Chat window, and ask Copilot Chat a question about the excluded file. If your content is excluded successfully, Copilot will be unable to answer your question, and will explain that some files were excluded from the conversation due to content exclusion rules.
    • In Vim/Neovim, begin typing in the file. If GitHub Copilot no longer provides inline suggestions as you type, the file is excluded.

Further reading