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 條評論

登入 後參與評論

還沒有評論,來搶沙發~