github / github/copilot-cli

Clarify/support .copilotignore semantics in Copilot CLI

未关闭
#3,785 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area:configuration area:permissions
主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

描述

### Summary

Please clarify and/or support `.copilotignore` semantics in Copilot CLI, especially for nested ignore files.

Related but broader issue: https://github.com/github/copilot-sdk/issues/963 asks for general `.copilotignore` support. This issue is specifically about the expected behavior in Copilot CLI and whether it should match the public VS Code Copilot Chat implementation.

### Existing public reference point

VS Code Copilot Chat has a public `.copilotignore` implementation:

- `COPILOT_IGNORE_FILE_NAME = '.copilotignore'` in `ignoreServiceImpl.ts`:
https://github.com/microsoft/vscode-copilot-chat/blob/main/src/platform/ignore/node/ignoreServiceImpl.ts#L23
- `IgnoreFile` uses the `ignore` npm package and `@humanwhocodes/gitignore-to-minimatch`, making the syntax intentionally gitignore-like:
https://github.com/microsoft/vscode-copilot-chat/blob/main/src/platform/ignore/node/ignoreFile.ts

The VS Code implementation appears to:

1. Track multiple `.copilotignore` files in a workspace.
2. Scope each ignore file to its own directory/subtree.
3. Sort ignore files deepest-first.
4. For a target path, check the deepest applicable ignore file first and stop when that file produces either an ignored or unignored result.

That is similar to gitignore-style scoped files, but it is not obviously the same as Git's full cascading merge semantics. It is closer to "nearest/deepest applicable `.copilotignore` wins when it has a matching ignore/unignore rule; otherwise broader files may still be checked."

### Problem

For Copilot CLI, the behavior is unclear:

- Does Copilot CLI support `.copilotignore` files at all, or only managed organization/repository content-exclusion policies?
- If `.copilotignore` is supported, should it match the VS Code Copilot Chat implementation linked above?
- Are multiple nested `.copilotignore` files discovered?
- Is each file scoped to its directory/subtree?
- Are patterns relative to the ignore file location or the repository/workspace root?
- How do negation patterns (`!foo`) interact across parent/child ignore files?
- Does the same exclusion decision apply consistently to file discovery, `@` file mentions, read/search tools, context loading, and edit targets?

This matters because users may assume `.copilotignore` behaves like `.gitignore`, place scoped files in nested directories, and then accidentally expose or allow edits to content they expected Copilot to ignore.

### Desired outcome

Please either:

1. Document that Copilot CLI supports `.copilotignore` and define its nested-file semantics, ideally aligning with VS Code Copilot Chat where possible; or
2. Document that Copilot CLI does not support `.copilotignore` and users should use managed content-exclusion policies instead; or
3. Add support/parity with VS Code Copilot Chat's public `.copilotignore` behavior.

### Environment

Observed while investigating Copilot CLI 1.0.61 behavior.

贡献指南

打开贡献指南

调研方向

首先复现报告的 Copilot CLI 1.0.61 在嵌套 `.copilotignore` 文件下的行为,并将其与链接的 VS Code Copilot Chat 实现进行比较。跟踪文件发现、`@` 提及、读取/搜索工具、上下文加载和编辑目标如何应用排除规则。项目记录或实现了针对嵌套文件、作用域、模式和否定的一致且经过测试的决策后,即视为完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
shell, vscode
领域
cli, tooling
Issue 类型
功能
难度
5/5
预计耗时
一周以上
活跃度
冷清
描述清晰度
需要澄清
新手友好度
30/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。