GitHub Copilot 自定义指令文件的项目作用域
来源:17golang原创
时间:2026-10-11 01:34:30 404浏览 收藏
团队把 GitHub Copilot 用进项目后,最容易遇到的不是不会写指令,而是指令放错了作用域:写在个人设置里,别人看不到;只写一份仓库级规则,又无法区分源码和测试目录。更稳妥的做法是把团队共用约定放进项目,再用路径级文件补充目录规则。
官方地址:https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions
.github/copilot-instructions.md是整个仓库的基础指令文件,适合放构建、测试和代码风格约定。.github/instructions/*.instructions.md配合applyTo可以把规则限制到某个目录或文件类型。- 当前文件同时命中仓库级和路径级规则时,两组上下文会一起提供给 Copilot;个人设置不等于项目配置。
先分清三种作用域,避免规则写在错误位置
项目级自定义指令解决的是“这个仓库希望 Copilot 怎样工作”。它应该随着代码一起进入版本控制,让新成员打开同一个项目时得到一致的约束。个人指令解决的是“我习惯怎样提问或表达”,不适合承载团队必须遵守的测试命令。
| 类型 | 典型位置 | 适合放什么 | 作用范围 |
|---|---|---|---|
| 仓库级 | .github/copilot-instructions.md | 项目结构、构建命令、通用风格 | 当前仓库的基础规则 |
| 路径级 | .github/instructions/*.instructions.md | 前端、测试、文档等目录的专属约定 | 由 applyTo 匹配的文件 |
| 个人级 | Copilot 个人配置 | 个人表达偏好和通用习惯 | 当前用户或个人环境 |
这里的关键判断是:如果规则需要提交给团队,就放进仓库;如果只服务某一类文件,就放进路径级文件;如果只是个人习惯,才保留在个人设置。不要把三者混成一个“全局提示词”。
创建仓库级 copilot-instructions.md
先在 VS Code 中打开目标项目:选择“文件”>“打开文件夹”,确认资源管理器的根节点就是仓库根目录。然后在资源管理器依次新建文件夹 .github,再在其中新建 copilot-instructions.md。文件名、点号和目录层级都不要改写。
第一份文件只放全仓库都适用的规则,例如项目使用什么命令、提交代码前要运行哪些测试、生成代码时需要遵循什么边界:
# 项目协作约定 - 修改 Go 服务后运行 `go test ./...`。 - 优先复用 `internal/` 中已有的接口,不新增重复的适配层。 - 改动配置时同时说明默认值、失败处理和回滚方式。 - 生成代码前先阅读同目录的现有实现,保持命名和错误返回风格一致。

保存后,这份文件就是项目的基础上下文。它不要求你把每个任务都写成提示词,也不应该塞进某个具体工单的临时要求。规则越稳定、越容易在团队中复用,越适合放在这里。
用 instructions 文件细分目录规则
当源码和测试需要不同约束时,在 .github/instructions 下新建以 .instructions.md 结尾的文件,并在文件头写 applyTo。例如下面的文件只针对 src 目录下的 TypeScript 文件:
--- applyTo: "src/**/*.ts" --- - 组件输入先定义明确的类型,不用隐式的 `any`。 - 异步请求统一经过项目的请求封装,并处理加载和失败状态。 - 修改公共组件时补充对应的单元测试。
测试目录可以有另一份规则,例如 .github/instructions/tests.instructions.md:
--- applyTo: "tests/**/*.ts" --- - 测试名称说明行为和预期结果。 - 外部请求使用仓库已有的 mock 工具。 - 每个失败断言都保留能定位输入条件的上下文。
路径模式是这一步的核心。src/**/*.ts 只会覆盖匹配的 TypeScript 文件;如果模式写成了不存在的目录,规则不会因为文件内容正确就自动生效。仓库级文件提供共同基础,命中的路径级文件再补充专属要求,两者可以同时进入当前请求的上下文。

在 Copilot Chat 中确认当前项目确实命中规则
文件写好后,按下面的顺序做一次使用侧确认:
- 在资源管理器选中一个匹配目标,例如
src/components/Button.ts,确保它属于当前已打开的工作区。 - 打开 Copilot Chat,先发送一个与项目约定有关的小问题,例如“这个组件应该使用哪条测试命令?”。
- 展开回答顶部的引用或上下文信息,查看是否出现仓库级指令文件;如果请求命中了路径规则,也检查对应的
*.instructions.md是否在当前上下文中。 - 切换到
tests下的文件重复一次,观察命中的路径规则是否随文件范围变化。
这一步检查的是“当前请求使用了哪些上下文”,不是让 Copilot 机械复述整份文件。若回答没有体现规则,先确认文件已经保存、工作区根目录正确、路径模式能够匹配,再考虑是否需要精简冲突指令。
常见边界:规则不生效时先看位置和匹配范围
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
| 团队成员看不到规则 | 文件是否在项目中并已提交 | 检查 .github/copilot-instructions.md 是否被忽略,提交后让成员重新打开仓库。 |
| 仓库级规则有效,路径级无效 | 目录层级、后缀和 applyTo | 把文件放进 .github/instructions,确认模式和目标文件实际路径一致。 |
| 回答出现互相冲突的要求 | 多份指令是否重复规定同一件事 | 把通用规则留在仓库级,把例外缩小到路径级,删除无法同时满足的句子。 |
| 只在一台电脑上生效 | 是否误写进个人设置 | 把团队规则迁移到仓库文件,并通过版本控制共享。 |
当前资料入口也可以直接收藏:https://docs.github.com/en/copilot/reference/custom-instructions-support。不同编辑器对支持范围和界面入口可能略有差异,但文件位置、路径匹配和版本控制这三个判断仍然是排错起点。
相关问题
仓库级文件和路径级文件要二选一吗?
不需要。仓库级文件负责共同约定,路径级文件负责更窄的补充规则;当前请求命中路径时,两者可以一起提供上下文。
个人指令可以替代项目级文件吗?
不适合。个人指令不会自然地随仓库提交,团队成员也未必拥有相同内容。项目构建、测试和代码风格应放进仓库文件。
为什么写了 applyTo 仍然没有命中?
最常见原因是工作区根目录或 glob 模式不对。先从目标文件的实际路径反推模式,再确认文件位于 .github/instructions 且已经保存。
-
182 收藏
-
250 收藏
-
447 收藏
-
373 收藏
-
213 收藏
-
308 收藏
-
425 收藏
-
324 收藏
-
115 收藏
-
323 收藏
-
143 收藏
-
459 收藏
-
文章 · 软件教程 | 8小时前 | docker · 软件教程 · 多环境配置 env_file Docker Compose include Compose 文件拆分 compose.override.yaml129 收藏
-
449 收藏
-
477 收藏
-
文章 · 软件教程 | 14小时前 | 开发环境 · vs code · 软件教程 · devcontainer.json VS Code Dev Containers Dev Container Features 容器开发环境 开发工具复用378 收藏
-
360 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习