智能体工作流

面向 AI 编程智能体的 Git worktree:安全工作流。

FluxGit ·

Git worktree 能为每项任务提供独立的检出文件和当前分支,同时共享仓库对象与引用。这样可以比较多个编程智能体的并行方案,而不让它们编辑同一个工作目录。

简要答案

为每个方案分配一个关联 worktree、一个分支和一个范围明确的任务。让两个方案都从同一个已记录的基准提交开始,在各自目录中运行 Codex、Claude Code、OpenCode、Cursor 或其他能在指定目录工作的工具,并保留主检出目录用于评审。比较前要求结果已提交且可评审。

选择满足验收条件的结果,暂停所有写入进程,确认目标检出目录干净,再按仓库常规评审和测试流程合并。worktree 会减少文件冲突,但不是安全沙箱:对象、大多数引用和远程仓库仍然共享,宿主授予 shell 的文件系统或网络访问仍可使用。

1. 为每个方案创建干净的 worktree

从主检出目录开始。确认其干净,更新或检查预定基准,只记录一次该提交,并从同一提交创建两个任务分支。

git status --short
git branch --show-current
BASE_COMMIT=$(git rev-parse HEAD)
git worktree add -b agent/task-a ../agent-task-a "$BASE_COMMIT"
git worktree add -b agent/task-b ../agent-task-b "$BASE_COMMIT"
git worktree list

为每个工具分配对应的文件夹和分支。不要让两个 worktree 检出同一分支,也不要让任务 A 写入任务 B 的目录。即使远程分支移动,已记录基准仍能让比较可复现。

分开目录不会限制 shell 权限。将凭据和宿主权限收紧到任务所需范围,并为需要人工控制的 Git 写入设置独立审批边界。

2. 使用相同的验收条件

向两个方案提供相同的任务说明、测试、约束和已记录基准。要求它们避免无关改动,并将结果提交到各自分支。未提交的工作树更难比较,也更容易在清理时丢失。

评审前暂停智能体。worktree 会分开检出文件,但权限过宽的进程仍可修改共享引用、访问远程仓库或读取任务目录之外的文件。

3. 从记录的基准比较两个方案

检查两个任务目录的状态,然后用同一个基准提交比较各分支。日志和差异比较都应保持该基准不变。

git -C ../agent-task-a status --short
git -C ../agent-task-b status --short
git log --oneline "$BASE_COMMIT"..agent/task-a
git log --oneline "$BASE_COMMIT"..agent/task-b
git diff "$BASE_COMMIT" agent/task-a
git diff "$BASE_COMMIT" agent/task-b

评审行为、测试、改动文件和范围。完成任务本身不是合并理由。优先选择满足条件且改动最小、最易理解的方案。

默认不要同时合并两个方案。如果有用思路分散在不同分支中,请挑选已验证的提交,或创建干净的组合分支并单独评审新结果。

4. 通过常规关卡合并选定结果

回到干净的主检出目录,选择一个已评审分支,并使用仓库常规的非快进合并流程。

CHOSEN_BRANCH=agent/task-a
git status --short
git diff "$BASE_COMMIT" "$CHOSEN_BRANCH"
git merge --no-ff "$CHOSEN_BRANCH"

合并期间保持智能体暂停。遇到冲突就停止并检查,按正常评审流程解决;不要让 worktree 工作流把冲突变成自动选择。

合并后、任何 push 前运行仓库测试。worktree 不能替代代码评审、CI、受保护分支或人工批准,也不能阻止另行授权的 shell 执行 push。

5. 不强制清理

移除任何关联检出目录之前,检查两个文件夹并保留所有需要的改动。

git -C ../agent-task-a status --short
git -C ../agent-task-b status --short
git worktree remove ../agent-task-a
git worktree remove ../agent-task-b
git worktree list
git worktree prune --dry-run

仅当 worktree 干净或剩余工作已被有意丢弃时,才在不使用 force 的情况下移除。评审结束前保留任务分支;删除文件夹与删除分支是两个决定。

更改管理记录前先以 dry run 预览 prune。如果 Git 拒绝正常移除,请调查剩余改动或锁,而不是绕过保护。

worktree 隔离什么,又共享什么

每个 worktree 独立共享或仍可访问
检出文件、工作区改动和本地构建产物仓库对象和大多数引用
当前分支以及各 worktree 的 HEAD 与索引远程仓库、凭据和共享配置
工具使用的任务目录权限过宽的 shell 可从目录外访问的内容

用 worktree 实现文件并行、清晰差异和可复现比较。用权限、受保护分支、评审与审批管理操作权。

兼容性取决于工具是否能在指定目录工作并遵守任务边界。该流程适用于具备此能力的工具,但不能证明所有工具都提供相同控制。

Git 官方资料

FluxGit worktree

在保留评审控制的同时比较并行方案。

FluxGit 可显示关联 worktree 与仓库状态、比较改动,并让受支持智能体的 Git 写入提案经过桌面端审批。独立 shell 仍保留宿主授予的访问权限。

相关资料