Claude Code 处理大仓库:怎么让它只看需要的目录(子目录 CLAUDE.md、claudeMdExcludes、deny 规则)

仓库太大,Claude Code 总在读无关文件、读进别的包的规则?本文按官方大仓库指南讲:从哪个目录启动、子目录 CLAUDE.md、claudeMdExcludes、Read 的 deny 规则、worktree.sparsePaths、additionalDirectories,以及一份合并后的配置示例。

NNathaniel bigo··原创首发·AI 辅助撰写
12 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 Plus 账号
本文根据 Claude Code 官方《Set up Claude Code in a monorepo or large codebase》和《How Claude remembers your project》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。本站(bigolab.com)不是 Anthropic 官方网站。

适用于谁

  • 仓库有几十万行代码,或是 monorepo(一个仓库里很多个包)的开发者;
  • 发现 Claude Code 老是读和当前任务无关的文件,上下文很快被占满的人;
  • 想让团队成员共用一套「只看相关部分」的配置的人。

结论先说

  1. 官方的判断是:Claude Code 能处理任意规模的仓库,但为小项目调好的默认设置,在大仓库里会让无关的指令和文件读取塞满上下文窗口,费 token 也拖累效果。
  2. 第一步最简单:在哪个目录启动。从子目录启动,只加载该目录及各级上层的 CLAUDE.md;从根目录启动,只加载根目录的,子目录的按需加载。
  3. 需要时再叠加:子目录 CLAUDE.md、claudeMdExcludes、Read 的 deny 规则、代码智能插件、worktree.sparsePaths、additionalDirectories。官方说这些设置彼此独立、可以叠加。
  4. 每一项都要分清是个人的还是提交到仓库的:官方在每个小节都写明了该放哪个文件。

各设置的用途对照

图:本站根据 Claude Code 官方《Set up Claude Code in a monorepo or large codebase》 整理的示意图

一、先决定在哪个目录启动

启动位置决定了三件事:不额外授权就能读写哪些文件、启动时加载哪些 CLAUDE.md、适用哪份项目设置。官方给的对照是:

  • 仓库根目录:能访问所有文件;启动时只加载根目录的 CLAUDE.md,子目录的按需加载。适合任务横跨多个包。
  • 某个子目录:只能访问该子树,需要更多访问权限要另行授予;加载该目录和各级上层目录的 CLAUDE.md。适合工作集中在一个包。

一个容易踩的点:.claude/settings.json 不会像 CLAUDE.md 那样从父目录继承。你在 packages/api/ 启动,就读 packages/api/.claude/settings.json;每个子目录的设置文件要写得自成一体。具体哪个目录的设置被读取,官方指向《settings》页的「where Claude Code looks for each file」一节。

二、给不同目录各放一份 CLAUDE.md

根目录一个文件写全仓库通用规则,每个包再放自己的。官方的示例很短:

根目录 CLAUDE.md:

markdown
Run package scripts from the package directory, not the monorepo root.
Prefix commit subjects with the package name, for example `api: add rate limiting`.
Never edit files under packages/*/generated/. Run `npm run codegen` in the package instead.

packages/api/CLAUDE.md:

markdown
Copy `.env.example` to `.env` before running anything. Tests and the dev server fail without it.
Write database queries with the Knex query builder. Never put raw SQL strings in route handlers.
Never edit a migration after it has merged. Add a new migration instead.

在 packages/api/ 启动,会同时加载这两份,而 packages/web/ 里的规则不会进入上下文。想确认加载了哪些,运行 /context all,看 Memory files 下的列表。每份写什么内容,参见 /guides/claude-code-claude-md-templates-frontend-backend-data。

官方还建议:把 CLAUDE.md 的改动当作普通文档改动在 PR 里评审;新一代模型发布后回头删掉那些只为绕开旧模型缺陷而写的规则;也可以加一个 Stop hook,在会话结束时读取对话记录并提出更新建议。

和 .claude/rules/ 里带 paths 的规则怎么选:想让各目录的负责人自己维护、规则随代码走,用子目录 CLAUDE.md;想所有规则集中在仓库根的 .claude/ 里,或同一条规则要用在很多分散的路径,用 paths 规则。

三、用 claudeMdExcludes 跳过别人的 CLAUDE.md

从根目录启动时,其他团队的包里的 CLAUDE.md 也可能在会话中被按需加载。claudeMdExcludes 可以让指定文件永远不加载。官方建议个人使用时写进 .claude/settings.local.json:

json
{
  "claudeMdExcludes": [
    "**/packages/web/**"
  ]
}

规则是 glob,匹配的是绝对路径,所以相对风格的模式要以 / 开头。官方列的其他写法:"/packages//CLAUDE.md" 排除所有包的 CLAUDE.md 但保留根目录的;"*/packages/legacy-/*" 排除名字以 legacy- 开头的包(连带规则文件);也可以写绝对路径排除某一个文件。

两点限制:它是静态清单,不是按任务切换的开关,今天做 api、明天做 web,官方建议直接换目录启动而不是改排除项;另外,组织统一部署的托管 CLAUDE.md 不能被排除。

四、挡住生成物和第三方代码

官方说明:Claude 的内容搜索默认遵守 .gitignore,所以 node_modules/、dist/、build/ 这类已被忽略的路径本来就不会出现在搜索结果里。需要额外处理的是已提交进仓库的生成代码或第三方 SDK,可以在 permissions.deny 里加 Read 规则:

json
{
  "permissions": {
    "deny": [
      "Read(./**/dist/**/*)",
      "Read(./**/build/**/*)",
      "Read(./**/*.generated.*)",
      "Read(./**/vendor/**/*)"
    ]
  }
}

官方特意把目录写成 /**/ 结尾而不是 /*,这样规则只管目录里的内容,Claude 仍可以 ls dist 或 cd build。放在 .claude/settings.json 提交到仓库,全团队生效;放在 .claude/settings.local.json 只管你自己。

要注意边界:官方说明 deny 规则覆盖内置文件工具,以及 Bash 中 cat、head、grep、find 这类被识别的文件命令;对内置 Grep 和 Glob 工具是尽力排除。但 Bash 里对包含被拒文件的目录做 grep -r,输出里仍可能出现它们;自己打开文件的子进程也不在覆盖范围内。所以它是减少干扰的手段,不是安全边界。想硬性防护可参考 /guides/claude-code-permission-modes。

五、少读文件:代码智能插件

在大仓库里查「这个函数定义在哪、谁在调用」,可能要读很多文件、跑很多次 grep。官方的代码智能插件让 Claude 连接语言服务器,直接跳转定义、查引用。官方示例是在 claude 提示符里安装 TypeScript 插件:

text
/plugin install typescript-lsp@claude-plugins-official

官方列出两种常见安装失败:提示 Marketplace "claude-plugins-official" not found,先用 /plugin marketplace add anthropics/claude-plugins-official 添加市场再重试;提示 Plugin "<name>" not found in marketplace "claude-plugins-official",用 /plugin marketplace update claude-plugins-official 刷新目录再重试。插件还要求你的机器上装有该语言对应的语言服务器程序,且从官方市场安装需要能访问 GitHub。插件的一般用法见 /guides/claude-code-plugins-marketplace。

六、worktree 只检出需要的目录

--worktree 会在新的 git worktree 里开会话,默认检出整个仓库。大仓库里可以用 worktree.sparsePaths,借助 git sparse-checkout 只写入列出的目录和根目录下的文件:

json
{
  "worktree": {
    "sparsePaths": [
      ".claude",
      "packages/api",
      "packages/shared"
    ],
    "symlinkDirectories": [
      "node_modules"
    ]
  }
}

路径相对仓库根目录;根目录下的文件(如 package.json、锁文件)总会被检出,但根目录下的目录不会,所以想在 worktree 里用到根目录的 .claude/settings.json 或 .claude/rules/,要把 .claude 写进去。symlinkDirectories 让每个 worktree 的 node_modules/ 链接回主仓库那份,避免重复占用磁盘。官方还提醒:这些设置是在 worktree 创建前从你启动的目录读取的,创建后会话的工作目录是 worktree 根,所以 worktree 里需要的权限规则、hook,要放在仓库根目录的 .claude/settings.json。worktree 的基础用法见 /guides/claude-code-worktree。

七、从子目录启动又要改兄弟包

在哪个目录启动的决策图

图:本站根据 Claude Code 官方《Set up Claude Code in a monorepo or large codebase》 整理的示意图

在 packages/api/ 启动时,默认只能读写这个目录。要改共享类型这类跨包的任务,有两种授权方式:

json
{
  "permissions": {
    "additionalDirectories": [
      "../shared",
      "../web"
    ]
  }
}

或启动时临时加:claude --add-dir ../shared。相对路径从启动目录算起。官方列了一张差别表:用 additionalDirectories 设置添加的目录,永远不加载它的 CLAUDE.md、规则和技能;用 --add-dir 或 /add-dir 添加的目录,技能会加载,CLAUDE.md 和规则需要再设环境变量 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 才加载。

八、一次改动跨多个包时

官方的两条建议:把共享类型的修改和它的所有调用点放在同一个会话里让 Claude 一起完成,决策才能前后一致;改之前先进入计划模式(见 /guides/claude-code-plan-mode),Claude 会把计划写进文件,长会话被压缩上下文之后,Claude Code 会重新注入这份计划文件。上下文压缩的机制见 /guides/claude-code-context-compact。

常见问题

Q:Claude 还是老读到我不想让它读的目录?

先看是否已在 .gitignore 中;已提交的目录用 Read deny 规则;注意 deny 对 Bash 里的 grep -r 不是完全有效。

Q:设置写了却没生效?

多半是放错层级。项目的 settings.json 不继承父目录;worktree 里读的是 worktree 根目录的那份。

Q:每次启动都很慢、额度掉得快?

上下文里无关内容越多,消耗越大。先按本文收窄范围,再考虑额度问题,需要更高额度可以看 Claude Code 订阅方案。

参考资料

  • Claude Code 官方:Set up Claude Code in a monorepo or large codebase — https://code.claude.com/docs/en/large-codebases
  • Claude Code 官方:How Claude remembers your project — https://code.claude.com/docs/en/memory

Nathaniel 的更多内容

  1. 01

    Claude Personal Finance 是什么:连银行账户问花销、怎么开、只读权限、谁能用、怎么解除

    Claude 的 Personal Finance(beta)通过 Plaid 只读连接你的银行、信用卡、贷款和投资账户,在一页里看余额和花销并用自然语言提问。本文按官方帮助页讲谁能用(仅美国、Pro/Max/Ultra)、连接与解除步骤、Claude 能看什么,以及它做不到的事。

    Claude0
  2. 02

    Claude Code 离开一小时回来对话被「压缩」了:Idle compaction 是什么、条件、怎么关

    Claude Code 的 idle compaction 会在你离开约一小时后,把 200K token 以上的长对话先压缩成摘要,下一条消息就不用重新处理整段历史。本文按官方文档讲触发条件、看到什么提示、用 /config 或 idleCompaction 关闭、调阈值,以及恢复旧对话的用量警告。

    Claude0
  3. 03

    ChatGPT Computer History 是什么:Mac 桌面端的活动记忆怎么开、怎么暂停和清除、谁能用

    Computer History 是 ChatGPT macOS 桌面应用里默认关闭的可选功能,把你在应用和网站里的活动整理成记忆和时间线,供 ChatGPT 与 Codex 引用。本文按官方文档讲怎么开、记录什么不记录什么、怎么暂停与清除、数据存哪、谁能用,以及提示注入风险。

    ChatGPTCodex0
  4. 04

    Codex 输入框出现灰色建议:Composer predictions 是什么、Tab 接受、怎么关、谁能用

    Codex 桌面 App 的 Composer predictions(beta)会在 Codex 回完后,根据当前对话在输入框里给出下一条消息的建议,按 Tab 接受、不会自动发送。本文按官方帮助页讲谁能用、哪些线程支持、怎么关、算不算额度,以及没出现时怎么查。

    ChatGPTCodex0
  5. 05

    ChatGPT 隐私中心(Privacy Center)在哪里:隐私设置入口、三大分类和哪些套餐有

    ChatGPT 的 Privacy Center 把记忆、广告、位置、临时对话、锁定对话、两步验证、模型改进、数据导出和删号等入口集中到一页。本文按官方帮助页讲怎么打开、三大分类各有什么、哪些套餐有,以及它不会替你改任何设置。

    ChatGPT0
  6. 06

    Claude Code 在 CI 里跑:从本机 claude -p 到 GitHub Actions 的完整例子(自动审 PR、控成本)

    一条线走完 Claude Code 的 CI 用法:先在本机用 claude --bare -p 配 --json-schema 跑通,再写进 GitHub Actions 用 claude-code-action@v1 自动审 PR,最后加上 --max-turns、超时、并发限制来控成本,并附上常见故障的排查顺序。

    Claude0

同产品的其他教程

  1. 01

    Claude Code 自定义 subagent 实例:测试员、调试员、只读调研员、只读数据库员怎么写

    四个可直接改的 subagent 实例:跑测试的 test-runner、找根因的 debugger、只读调研员、用 PreToolUse hook 限成只读 SQL 的 db-reader;讲 tools、disallowedTools、model、maxTurns 怎么配,怎么点名调用。

    Claude0
  2. 02

    Claude Code 的 CLAUDE.md 模板:前端、后端、数据分析各一份,附拆分与自检方法

    直接拿去改的三份 CLAUDE.md 模板(前端、后端、数据分析),每份都控制在官方建议的 200 行以内;再讲怎么用 .claude/rules 的 paths 拆出专属规则、用 @ 导入长文档,以及用 /context all 和 /doctor prompt-audit 检查是否生效。

    Claude0
  3. 03

    Claude Code 自己写一个插件并发布到 marketplace:plugin.json、marketplace.json、validate 到团队安装的完整流程

    想把自己写的 Skill、Hook 打包给团队用?按 Claude Code 官方 Plugins 文档,从目录结构、plugin.json、claude plugin validate,到写 marketplace.json、推到 Git、让同事一条命令安装,再到版本更新,走完一遍完整流程。

    Claude0
  4. 04

    Claude Code 写一个会自动触发的 Skill:从需求到触发,用 description、when_to_use 和 paths 控制它什么时候出场

    写好的 Skill 总是不触发,或者什么都触发?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整实例:把「改数据库迁移前先检查」写成一个会自动出场的 Skill,包含 description、when_to_use、paths、附带脚本、触发测试和评估。

    Claude0
  5. 05

    Claude Code 配 Sentry MCP 排查线上报错:添加命令、浏览器授权、贴 issue 链接修 bug 和插件子智能体

    线上报错只能手动复制堆栈给 Claude Code?Sentry 官方提供 MCP 服务,可以让它直接读 issue、堆栈和 trace。本文按 Claude Code 官方 MCP 文档和 Sentry MCP 官方说明,讲添加命令、/mcp 授权、典型排查流程、插件方式和自托管注意事项。

    Claude0
  6. 06

    Claude Code 配 Context7 MCP 查最新文档:两种安装方式、use context7 怎么写、指定库和版本

    Claude Code 写出来的代码用了旧版 API?Context7 是一个把库的最新文档喂给编程助手的 MCP 服务。本文按 Context7 官方仓库和文档,讲两种安装方式、在 Claude Code 里的添加命令、use context7 与 library ID 的写法,以及使用时的注意事项。

    Claude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~