codecamp

TRAE SOLO 工作树

工作树(Worktree)功能可以让不同的任务在相互隔离的 Git 环境中执行。当你需要在同一个项目中并行处理多个任务(例如,在一个任务中开发新功能,同时在另一个任务中修复紧急漏洞)并希望避免代码冲突时,该功能是理想之选。

它会为每个任务创建一个独立的目录,其中包含专属的文件、依赖项和代码变更,从而确保你的主工作目录保持整洁且不受干扰。

名词解释

名词 描述
工作树 Git 的一项原生机制,允许单个代码仓库同时拥有多个独立的工作目录,每个目录可以检出不同的分支。
工作树分支 某个工作树当前检出的 Git 分支。它决定了这个工作树目录里显示的是哪条分支的代码,例如 feat-pet-shop-1sfbnt
工作树目录 与某个工作树关联的本地文件夹路径,即你在文件系统中能看到的、存放实际代码的目录。在 TRAE SOLO 中,此目录的名称与对应的工作树分支名称一致,格式为 /{worktree_branch_name}

适用范围

此功能仅适用于在本地环境中运行的任务。

前置条件

确保你已在本地安装 Git。

创建工作树

发起任务前,在对话输入框左下角,将模式设置为 。

任务启动后,智能体将为此任务自动创建一个专属的工作树分支和对应的工作树目录。你可以在对话输入框顶部看到带工作树标记的新分支。

合并代码

当智能体在工作树中完成编码后,你可以将代码合并到主分支或其他目标分支。操作方式如下:

  • AI 自动合并:在对话框顶部的工作树分支栏中,点击 AI 合并 按钮。AI 将自动分析代码变更、解决冲突并完成合并。
  • 手动合并:在对话框顶部的工作树分支栏中,点击 ··· 并选择 手动合并 选项,然后按照界面指引操作。若出现冲突,你需要先点击 AI 解决冲突 按钮解决冲突,再继续该流程。

代码合并后,对话流底部将显示一条带有 “代码已合并“ 文案的分割线。请注意,由分割线上方的对话所产生的内容无法回退。

查看工作树的磁盘占用

你可以随时查看各工作树占用的本地磁盘空间。

  1. 前往 设置 > 工作树
  2. 工作树磁盘占用 区域,查看所有项目下各个工作树的磁盘空间占用。

清理工作树

清理工作树会将其对应的本地目录(工作树目录)彻底清除以释放磁盘空间,但该任务的对话历史和代码变更记录将被保留。此外,你可以选择是否保留该工作树的 Git 分支。

清理工作树的方式如下:

  • 方式一:从任务列表中清理

    a. 在左侧任务栏中,将鼠标悬停在目标任务上。
    b. 点击出现的 ··· 图标,然后选择 删除工作树
    c. 在弹窗中,根据需要勾选 保留工作树分支 选框,然后点击 删除 按钮。

  • 方式二:从设置中心清理

    a. 前往 设置 > 工作树
    b. 在 工作树磁盘占用 区域,从列表中选择需要删除的工作树。
    c. 点击右下角的 清理 按钮。
    d. 在弹窗中,根据需要勾选 保留工作树分支 选框,然后点击 删除 按钮。

  • 方式三:从工作树分支栏中清理

    a. 在对话框顶部的工作树分支栏中,点击 ··· 图标,然后选择 删除工作树。若代码合并已完成,分支栏将直接显示 删除工作树 按钮。
    b. 在弹窗中,根据需要勾选 保留工作树分支 选框,然后点击 删除 按钮。

💡提示
清理工作树时,如果你选择保留其 Git 分支,系统将只删除本地的工作树目录,而分支本身会保留下来。之后,你仍然可以前往 设置 > 工作树 ,在 工作树磁盘占用 区域找到并彻底清理该分支。

相关设置

前往 设置 > 工作树,在 工作树清理 区域,按需进行以下设置:

设置 描述
清理工作树时默认保留分支 启用该功能后,在你删除工作树时,确认弹窗中将默认勾选 保留工作树分支 选框。
工作树磁盘空间占用提醒 设置一个磁盘空间占用阈值。当所有工作树目录占用的总空间达到此阈值时,系统将发出通知,提醒你进行清理。
TRAE SOLO 云端运行环境
TRAE SOLO 自动化
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

TRAE SOLO 最佳实践

TRAE SOLO 外部应用授权

TRAE SOLO 官方活动

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }