Git 与 Worktree
Codeg 在工作区中内置了一个完整的 git 客户端,因此审阅智能体写下的内容并将其落地,与提示同属一个闭环——无需跳转到单独的 git 工具。一切都位于你已经打开的面板中:右侧的更改和提交标签页,以及分支菜单——标题栏中那个文件夹与分支按钮——负责其余的一切。集成终端始终在那里,供你运行偶尔需要的命令,但你很少会用到它。
审阅你的更改
打开右侧面板中的更改标签页,即可一眼看到你的工作树,它分为已跟踪的更改和未跟踪的文件。每个已跟踪的文件都会显示它的 git 状态(M 已修改、A 已添加、D 已删除、R 已重命名……)以及一个实时的 +/− 行数统计。点击任意文件即可打开它的 diff。
这些 diff 是只读的——并排显示,HEAD 在左侧,你的工作树在右侧,配有上一处/下一处以逐一浏览每处更改。它们用于查看改动了什么,无论改动出自你还是智能体之手;你在提交时决定保留什么,而不是通过编辑 diff 来决定。
右键点击一个文件——或一个文件夹,以便一次性操作多个——即可看到其余操作:
- 查看 Diff / 打开文件——审阅更改,或打开真实文件进行编辑。
- 添加到会话——把文件作为上下文交给智能体。
- 回滚——放弃某个文件的更改,并将其恢复到上一次提交。此操作具有破坏性,会先征询确认。
- 删除——对于未跟踪的文件,将其从磁盘上移除。同样具有破坏性,同样需要确认。
这里没有单独的暂存步骤——Codeg 不会要求你在提交前先 git add。你只需在提交时(见下文)勾选想要的文件即可。新文件起初处于未跟踪状态;如果你想在提交之前就把某个文件纳入 git,添加到 VCS 会开始跟踪它。
还不是仓库?
如果文件夹不在 git 管理之下,更改标签页会予以说明——从分支菜单中选择初始化 Git 仓库即可创建一个。
提交
当你准备好保存工作时,提交代码——通过分支菜单、更改标签页或文件菜单——会打开一个专用的提交窗口。勾选要包含的文件(已跟踪的文件默认被选中,未跟踪的则不会),点击任意名称可预览其 diff,写一条消息,然后提交。
提交按钮同时也是一个菜单:提交会记录选中的文件,而提交并推送会在同一步骤中把它们发送到你的远程仓库。Codeg 会用你为该远程仓库设置的 git 账户 的作者身份为每次提交盖章,因此你的提交能被正确归属,而无需在每个项目中都设置 user.name 和 user.email。
分支、合并与变基
标题栏中的分支菜单是你的分支切换器,也是大多数 git 操作的归处。它列出你的本地和远程分支;选择一个即可切换到它,或打开某个分支的子菜单,将它合并到当前分支、把当前分支变基到它上面,或将它删除。新建分支会从你当前所在的位置创建一个分支并检出它。
切换使用的是普通的检出,因此 Codeg 不会替你移动未提交的更改——如果 git 会拒绝,请先提交或储藏。至于储藏,储藏更改会把你的工作收起来(可选择保留索引中的暂存内容),而恢复储藏会列出你的储藏,供你应用或丢弃。
推送、拉取与远程仓库
- 拉取代码会获取并合并你的上游;如果合并发生冲突,Codeg 会打开冲突工具(见下文),而不是把你留在一个进行了一半的合并上。
- 获取远程分支会从你的远程仓库刷新一切,而不触动你的工作树。
- 推送会打开一个窗口,列出你尚未推送的提交,让你在它们发出去之前确切看到即将发送的内容。在提交标签页中,每次提交上的云朵图标能让你一眼看出它是已推送、未推送,还是未配置上游。
- 管理远程仓库让你添加、编辑或移除仓库所指向的远程仓库。
登录以推送——git 账户
通过 HTTPS 推送需要凭据,而 Codeg 会以 git 账户的形式为你管理它们,这样你就不必每次推送都重新输入令牌。在设置 → 版本控制下添加一个:
- 一个 GitHub 账户——一个个人访问令牌,附带一个直达 GitHub 令牌页面的链接,并已预选好正确的作用域。
- 一个用于 GitLab、Bitbucket 或自托管服务器的 Git 账户——服务器 URL、用户名和令牌。
账户按远程仓库的主机进行匹配,其中一个被标记为默认以打破平局,而令牌保存在你的系统密钥环中,绝不以明文形式存储。账户一旦设置好:
- 你的推送和拉取会顺畅运作——Codeg 会自动向 git 提供凭据。
- 智能体的也一样。 当智能体在终端中运行自己的
git push时,它会通过同一个账户进行认证——无需单独设置。 - 提交会被归属到该账户的身份。
如果某个 git 操作撞上了认证壁垒,Codeg 会内联提示,验证你输入的内容,并将其保存为一个账户,这样就不会再次询问。SSH 远程仓库继续使用你自己的 SSH 密钥,因此它们在这里不需要账户。
→ 版本控制与 Git 详细介绍了这些设置中的每一个字段。
解决冲突
当合并、变基或拉取遇到冲突时,Codeg 会捕捉到它并给出一个合并冲突提示:中止并退出,或打开合并工具。该工具是一个三栏编辑器——左侧是本地(Ours),右侧是远程(Theirs),中间是一个可编辑的结果。
逐一处理每处冲突:接受某一侧——在该块上点击接受本地或接受远程——或者直接把解决方案输入到结果窗格中;这是 Codeg 中唯一一个你可以编辑的 diff。标题栏按钮可一次性应用整整一侧,或应用所有无冲突的块。当某个文件干净后,点击标记为已解决,Codeg 会暂存它并把你带到下一个。一旦每个文件都解决完毕,完成合并会结束该操作——或者用中止把整件事回退。
使用 worktree 并行工作
git worktree 是同一个仓库的第二份工作副本,在它自己的目录中检出到它自己的分支上。Codeg 围绕它们构建并行开发:不再是一次只有一个智能体在一个分支上工作,你可以让多个智能体同时工作,每个都在自己的 worktree 中、在自己的分支上——不会互相踩到对方的文件,也不会有做了一半的更改在任务之间相互渗漏。
从分支菜单 → 新建 worktree 创建一个。Codeg 会预填一个新的分支名称和一个与你仓库相邻的同级目录(两者都可编辑),运行 git worktree add,并且——精彩之处在于——开启一个以该 worktree 为根的全新对话。在那里开启一项任务,智能体便会完全在其内部工作。
在侧边栏中,一个仓库的 worktree 会分组显示在它下方,因此一个项目的并行分支会聚在一起。切换到某个位于 worktree 中的分支,会把你带到那个 worktree,而不是在你当前的分支之上进行检出。回报是:将几个会话并排平铺,每个都在自己的 worktree 中,看着一支智能体舰队同时构建不同的功能——这是多智能体协作的天然搭档。
自动化也依赖同样的机制:每次运行都可以在自己的一次性 worktree 中执行,因此计划任务永远不会与你的工作树发生碰撞。
worktree 需要你自己清理
Codeg 会创建 worktree,但不会删除它们。从工作区移除某个 worktree 的文件夹会关闭它的标签页,但会把该 worktree 及其分支留在磁盘上——请用 git worktree remove 自行清理已完成的 worktree(如果不再需要,也删除对应的分支)。