← 返回
AI技术

Claude Code:使用 Git Worktrees 并行组织代理

✍️ zhirenhun 📅 2026/9/29 👁 183 阅读 ⏱ 29 分钟
Claude Code:使用 Git Worktrees 并行组织代理

我在学习 Coursera 上的课程 Claude Code: Software Engineering with Generative AI Agents 时,想象了一个由多个 squad 维护的产品:Checkout 负责修改订单创建,Payments 更新状态,Accounts 消费事件,Platform 准备 release/homolog 包。每个团队负责一部分,但共享的更改可能导致这些前端相互冲突。

这就像车间里的几个团队:每个团队都需要自己的工位来拆卸一辆车,但它们仍然依赖同一套零件库存和最终检验。这门课程让我意识到,同样的争夺也发生在代理之间:两个会话可能试图在同一个 checkout 上工作并混合更改。Worktrees 为每个会话提供一个隔离的工位;Claude Code Desktop 使这些前端变得可见,并让 branch、diff、PR 和 CI 更加紧密地结合。

Git 创建 worktree;Claude Code harness 的价值在于把这种能力转化为引导式的可视化流程,并将每个会话绑定到其目录、分支和进行中的工作。

Claude Code 已经在 CLI、Desktop 和编排命令中提供了该流程的部分功能。机会在于将这些功能与每个 squad 使用的流程以及协调跨团队更改的契约相连接。

目录

1. Squad 的问题不是创建分支

大型 squad 已经知道如何创建分支。当团队内部的并发工作量增加时,问题就会出现:

  • 一次迁移、一个 lockfile 或一个共享合同,能够把看似独立的任务拉近。
  • 在 squad 之间,即使没有人编辑同一个文件,冲突也可能发生:

    一个分支分离了历史,但传统的 checkout 仍然占用单个工作目录。切换分支会改变该目录中的文件。对于顺序的人工工作,这通常已经足够。对于编码代理的并行会话,共享目录会成为瓶颈。

    工作树增加了物理隔离:

    repo/
    ├── main/          → main
    ├── exportacao/    → feature/exportacao
    ├── dashboard/     → feature/dashboard
    └── notificacoes/  → feature/notificacoes
    

    每个目录都有自己的文件和自己的分支,而它们共享同一仓库的历史。

    这并不能消除合并冲突,也不能协调 squad 之间的合同。它消除的是一种先前的冲突类别:两个任务在仍在执行时同时修改同一个检出。

    2. 组织并行工作的可视化层

    Git worktree 并不是由 Claude Code 发明的。Claude Code 桌面版 的不同之处在于,它将 Git 的这一原生能力融入到一个界面中,使并行工作变得易于理解和可审查。

    截图:Anthropic。侧边栏汇集了项目和会话;worktree 为每个本地会话提供一个隔离的工作目录。

    侧边栏变成操作面板

    在 Code 选项卡中,每个对话都是一个独立的会话,拥有自己的历史、项目文件夹和更改。在 Git 仓库中,Desktop 会为每个本地会话自动创建一个 worktree。侧边栏显示这些会话,允许并行运行多个会话,并提供按状态、项目和环境的过滤,此外还支持按项目分组。

    这创建了一个如下所示的操作映射:

    Projeto: checkout
    ├── Sessão: corrigir autenticação
    │   ├── worktree + branch próprios
    │   ├── diff em revisão
    │   └── PR aguardando CI
    ├── Sessão: atualizar SDK
    │   ├── worktree + branch próprios
    │   └── implementação em andamento
    └── Sessão: investigar regressão
        ├── worktree + branch próprios
        └── aguardando decisão humana
    

    这不是对仓库所有分支及其关系的可视化,就像专门用于 Git 历史的工具那样。它展示的是由 Claude Code 进行的工作前线。对一个团队来说,这已经解决了一个重要痛点:不再有一堆没有明确标识的终端,而是出现了一份隔离任务的列表,每个任务都有自己的状态和上下文。

    此层提供的功能

    可视化功能 提供的功能 对团队的价值
    侧边栏会话 列出独立的工作并允许在它们之间切换 让执行中的内容及其状态可见
    按会话自动 Worktree 无需手动配置即可为每个任务分离目录和更改 降低同一检出下的本地冲突和分支切换
    过滤和分组 按状态、项目或环境过滤,并按项目分组 帮助跟踪多个前线,避免混淆仓库和上下文
    并排显示两个会话 同时显示两个工作 方便将更改与其依赖进行比较,或跟踪生产者和消费者
    可配置的分支前缀 标准化 worktrees 中创建的分支名称 方便识别来源、任务或团队约定
    聊天、计划、任务和子代理面板 在会话内组织推理、执行和委派 保持任务上下文与正在修改的代码相关联
    可视化 diff 和行注释 允许审查文件并向 Claude 提供反馈 将审查放在提交或 PR 之前
    集成的终端和编辑器 在同一会话的目录中运行 避免在错误的 worktree 中执行命令或编辑文件
    PR 和 CI 条 跟踪检查,并在配置时尝试修复失败 将本地执行连接到团队的主要集成传感器
    会话归档 手动删除 worktree,或在 PR 关闭或合并后删除 有助于控制临时本地环境的积累

    当更改涉及多个仓库时,远程会话也可以接收多个仓库,每个仓库都有自己的分支选择器。这在一个小队修改了合约而其他小队需要更新其消费者时很有用。不过,该界面仅负责整理这些工作线,而不会决定兼容性、合并顺序或部署序列。

    隔离会话也可在 CLI 中使用

    官方文档展示了在独立工作树中启动一个会话的过程:

    claude --worktree feature-auth
    

    您可以打开另一个会话,使用不同的名称来执行两个任务,而不会导致本地更改冲突。仓库需要至少有一个提交,以便 Git 能够解析基础。该流程在 常见工作流程 中有描述。

    大规模更改与 /batch

    对于跨越仓库的更改,/batch 描述了另一个层次:Claude Code 会搜索代码,提出分解方案,并在获得批准后,在独立的 worktree 中执行这些单元。每个单元可以实现、测试并打开自己的 PR。

    此流程适用于真正可分离的更改,例如更新多个遵循同一契约的模块。如果所有单元都依赖于同一架构决策或修改同一核心,则需要在并行之前完成分解。

    PR 周期

    Claude Code 还能创建 PR、审查 diff 并跟踪检查。在可用时,/autofix-pr 会启动一个远程会话以观察 CI 失败和审查评论。Claude Code GitHub 动作 将代理带到仓库事件中,以便自动化与 PR 相关的任务。

    截图:Anthropic。Claude Code Desktop 在会话中显示 PR 检查的状态。

    这些选项将 PR 转变为代理工作与 squad 控制之间的集成点。它们不会让自动合并成为默认的好决定。

    3. 工作单元将任务、worktree 和 PR 联系起来

    传统流程通常表示如下:

    Pessoa → branch → commit → pull request
    

    如果使用代理,我会使用更明确的单位:

    Tarefa + responsável humano
               ↓
    Contrato de escopo e aceite
               ↓
    Sessão do Claude Code
               ↓
    Worktree + branch
               ↓
    Implementação + testes locais
               ↓
    Pull request
               ↓
    CI + revisão inferencial + revisão humana
               ↓
    Integração
    

    人类负责人仍然出现在开始阶段。代理可以产生变化,但有人需要对分解、写作限制以及集成决策负责。

    在打开会话之前,任务可以加载一个小合同:

    task: adicionar exportação CSV
    owner: squad-relatorios
    owns:
      - src/export/**
    must_not_change:
      - migrations/**
    acceptance:
      - preserva os filtros atuais
      - neutraliza fórmulas em células exportadas
      - passa nos testes de exportação
    integration:
      base_branch: main
      human_review: required
    

    Worktree 将文件隔离。该合同指导工作。测试和审查验证更改是否符合约定。

    当项目跨团队进行时,合同还需承担交付之间的依赖:

    initiative: evoluir contrato de notificacoes
    contract_owner: squad-plataforma
    producers:
      - service-events
    consumers:
      - app-web
      - app-mobile
    compatibility: backward-compatible
    merge_order:
      - contrato e produtor
      - consumidores
      - remoção da versão anterior
    sensors:
      - contract tests
      - CI por repositório
      - revisão dos owners
    

    每个任务仍可拥有自己的 worktree 与 PR。各 squad 之间的纽带是共享的契约、明确的顺序以及兼容性传感器。

    4. 在 squad 内部及之间采用的五种方式

    我不建议一开始就把所有资源全部关联。至少有五种可行的切割方式。

    选项 工作方式 适用场景 主要风险
    1. 辅助 worktree 每个人通过 claude --worktree <tarefa> 打开一个会话 功能、错误以及本地中断 随意创建多分支,缺乏清理纪律
    2. 桌面上的可视化看板 侧边栏组织会话和 worktree;面板将任务、diff、PR 与 CI 联系起来 需要查看状态和上下文的多前线 squad 把可见性当作协调,并行化依赖任务
    3. squad 之间的契约 每个 squad 在自己的 worktree/PR 中工作,通过契约、负责人以及集成顺序相连接 API、共享包或多仓库项目 孤立执行,忽略兼容性与发布
    4. 使用 /batch 进行编排 Claude 提出独立单元并将其分配到各个 worktree 在独立模块上的迁移或重复变更 分解不好会导致 PR 增多和返工
    5. PR 与 CI 的循环 GitHub Actions、审查以及 /autofix-pr 对 PR 作出反应 拥有可靠测试和明确标准的仓库 代理仅修复症状或无限制扩大范围

    我的建议是先在一个 squad 内从选项 1 开始。这几乎不改变当前流程,却能让隔离变得可观察。随后,在两个 squad 之间挑选一个小变更来测试选项 3:兼容的契约、关联的 PR、明确的所有者以及显式的集成顺序。

    /batch 最后登场。它能提升吞吐量,但同时也会增加成本、PR 数量以及集成负担。这是一种用于可拆分工作的编排工具,而非万能的生产力按钮。

    5. harness 需要指南与传感器

    编码代理是模型 + harness。在这种情况下,Claude Code 的 harness 提供会话、工具、权限、子代理以及与 Git 的集成。团队仍需构建仓库的 user harness:上下文、限制、测试、CI 和审查规则。

    关注点 生成前的指南 类型 生成后的传感器 类型 轴
    任务范围 带有 owns 和 must_not_change 的合同 推断的 路径脚本 + 人工审查 计算的 + 推断的 行为
    仓库约定 CLAUDE.md 和按路径的规则 推断的 linter、格式化工具和审查 计算的 + 推断的 可维护性
    架构限制 允许的模块和依赖关系图 推断的 架构测试 + 架构审查 计算的 + 推断的 架构适应度
    期望行为 验收标准和示例 推断的 单元测试、集成测试和 E2E 计算的 行为
    集成 基础分支、顺序和负责人 推断的 强制 CI 和分支保护 计算的 行为
    团队间合同 所有者、版本、兼容性和推出顺序 推断的 合同测试 + 所有者审查 计算的 + 推断的 架构适应度 / 行为
    安全 最小权限和禁止的文件 计算的 + 推断的 扫描器、差异审查和人工批准 计算的 + 推断的 行为

    工作区是隔离的计算基础设施。它不会替换这些传感器中的任何一个。

    界面仅仅因为显示状态而不会成为传感器。分支前缀、所选基础和任务合同在更改之前充当指南。带注释的 diff 作为推断传感器;测试和分支保护作为计算传感器。CI 条仅将这些传感器的结果带到会话进行的同一表面。

    如果 CLAUDE.md 说“不要破坏兼容性”,但 CI 没有合同测试,团队仍会依赖推断指令来保护目标行为。当可重复的规则变成计算传感器时,harness 会变得更强。

    6. Worktrees 无法解决的问题

    在不了解工具局限的情况下推广它,只是把一个瓶颈换成另一个。

    Worktrees 无法解决:

    • 两个任务同时修改同一个合约、迁移文件或 lockfile;
    • 所有权不明确以及不同 squad 的 API 之间不兼容;
    • 在独立仓库中,生产者与消费者之间的部署顺序;
    • 审查队列跟不上 PR 数量的增长;
    • 本地环境争夺同一端口、数据库或外部资源;
    • 测试缓慢、不稳定或无法检测回归;
    • 长期分支积累与主线的偏差;
    • 多个并发会话消耗的成本和上下文;
    • 对谁负责批准和集成每个更改的责任不明确。

    视觉层也不知道流程 develop → release/homolog → pacote de produção。它只显示会话和关联的分支,但不能阻止任务从错误的基础开始、进入错误的包或以错误的顺序被提升。分支政策只是一个指南;分支保护、测试和 CI 是需要阻止这些偏差的计算传感器。

    一些被忽略的文件可能需要在每个 worktree 中存在。Claude Code 提供 .worktreeinclude,但我会把它当作所需本地工件的白名单。凭证和密钥不应在目录之间自动复制。

    我也会避免在第一阶段自动合并。在此之前,团队需要检查测试、审查和分支保护是否真的能够拦截重要的错误。

    7. 在扩大之前的小规模推出

    我建议进行两个可逆的实验。

    首先,在一个 squad 内:

    1. 选择两个独立且具有可靠测试的任务。
    2. 明确负责人、允许的文件以及验收标准。
    3. 为每个任务打开一个 Claude Code 的会话/worktree。
    4. 要求独立的 PR、绿色 CI 和人工审查。
    5. 记录冲突、CI 重跑、返工和审查时间。
    6. 与未使用并行会话的类似任务进行对比。

    然后,在两个 squad 之间:

    1. 选择一个小的合约更改或共享库更改。
    2. 明确合约的所有者和消费方的所有者。
    3. 定义兼容性、依赖的 PR 以及合并/部署顺序。
    4. 在各自的会话和 worktree 中执行每一部分。
    5. 要求合约测试、每个仓库的 CI 以及交叉审查。
    6. 测量 squad 之间的等待时间、集成失败和返工。

    如果这套流程跑得通,下一步就是把任务契约固化成模板,并把确定性规则移交给 CI。只有在这之后,才值得尝试 /batch、例行任务或自动修复 PR。

    成功的标志不是“我们开了更多 PR”。对小队内部而言,它意味着在不增加回归的前提下减少等待和上下文切换;对小队之间而言,则意味着在不破坏兼容性、不把返工转嫁给其他团队的前提下减少集成阻塞。

    这正是这门课程改变我看 Git 视角的地方。在一个大团队里,分支依然是变更线,PR 依然是评审单元。worktree 补充了一处隔离的工位,让个人或智能体可以在不打乱他人环境的前提下工作。而在小队之间,契约、负责人和传感器负责协调这些工位,让它们交付同一项举措中彼此兼容的部分。

    Claude Code Desktop 则为 Git 的这种能力赋予了可视化形态:侧边栏把并行会话整理得井井有条,各个面板让上下文、改动、PR 和 CI 触手可及。harness 的功劳在于把这些部件串成一条开发者既能跟进、又能随时接续的流程。至于小队之间的协调,依然依托远程分支、契约、PR 和 CI。真正打动我的,正是这套组合。

    你眼下最大的瓶颈在哪里:是小队内部的并行,还是小队之间的依赖?你又打算从哪里入手——每个任务一个 worktree、共享契约,还是 PR 周期的自动化?

    ——

    🧑‍💻

    zhirenhun

    一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

    ai git productivity programming