# \[Bug\] worktree 模式在含大量被忽略文件的仓库中必然失败：Git 命令输出超过限制（OUTPUT\_LIMIT）

**URL:** <https://forum.qoder.com/t/bug-worktree-git-output-limit/12594>\
**Category:** Bug Reports\
**Tags:** agent, others\
**Created:** [September 18, 2026, 6:57am UTC](https://forum.qoder.com/t/bug-worktree-git-output-limit/12594 "2026-09-18T06:57:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![124443](https://yyz2.discourse-cdn.com/flex010/user_avatar/forum.qoder.com/124443/32/5647_2.png) [@124443](https://forum.qoder.com/u/124443)\
**Post date:** [September 18, 2026, 6:57am UTC](https://forum.qoder.com/t/bug-worktree-git-output-limit/12594/1 "2026-09-18T06:57:00Z")

</div>

**版本** ：Qoder 桌面版 0.3.3（macOS，Apple Silicon）

**现象**  
在一个 git 仓库中，用 worktree 模式（从当前工作树创建新工作区）新建会话，发送第一条消息后会话立即变为 error、无任何回复，提示：

> Git 命令输出超过限制，请缩小操作范围后重试。

日志错误：`ChatSessionWorktreeCreationError`，`errorCode: OUTPUT_LIMIT`，失败阶段 `stage: git_creation`（约 4 秒后失败）。同仓库下多个会话 100% 复现；「当前工作区」模式正常。

**复现条件**

1. 仓库包含大量被 .gitignore 忽略的文件（例如多个 node\_modules，合计约 27 万个文件）；
2. 仓库根目录存在 `.worktreeinclude` 文件（用于声明需要复制进新 worktree 的被忽略文件，如本地环境配置文件）；
3. worktree 模式新建会话并发送任意消息。

**原因定位** （分析应用包 app.asar 内的实现）  
worktree 创建时「复制 .worktreeinclude 声明文件」这一步的实现是：

1. 先执行 `git ls-files --others --ignored --exclude-standard -z` 列出仓库 **全部** 被忽略文件；
2. 再执行 `git ls-files --others --ignored --exclude-from=.worktreeinclude -z` 列出 include 声明的文件；
3. 两者求交集后复制。

这两条 git 命令的 maxBufferBytes 上限是 16MB（应用内常量 `V8e = 16 * 1024 * 1024`）。第 1 步在此类仓库中输出实测约 38MB，超出上限后 Node 抛 `ERR_CHILD_PROCESS_STDIO_MAXBUFFER`，被映射为 `OUTPUT_LIMIT`，导致整个会话创建失败。  
而实际需要的只是第 2 步的结果（本例中仅 1 个文件），无需先全量枚举被忽略文件。

**期望**

- 不要全量枚举被忽略文件（可直接用 `--exclude-from=.worktreeinclude`，或对每个模式用 check-ignore 判断，或流式处理/提高上限）；
- 至少该步骤失败不应导致整个会话无法启动。

**影响** ：node\_modules 较大的仓库中，worktree 模式 100% 不可用。
