尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Gemini CLI Git Worktree 使用指南:3 步隔离并行会话的代码改动

Gemini CLI Git Worktree 使用指南:3 步隔离并行会话的代码改动 Gemini CLI Git Worktree 使用指南3 步隔离并行会话的代码改动【免费下载链接】awesome-design-systems ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems痛点两个会话抢同一份工作区两个 Gemini CLI 会话同时读写同一份工作目录是并行开发最常见的翻车现场一个修登录 bug另一个开发搜索功能半成品文件被对方模型读进上下文未提交改动互相污染提交时两笔工作缠在一起分不开。Git Worktree 就是解法——Gemini CLI 的实验性 Git Worktree 功能把每个并行会话装进独立工作区代码隔离一步到位。Git Worktree是 Git 原生的多工作区能力每个工作目录拥有独立文件与分支却共享同一份仓库历史。这个实验性功能在启动时加一个--worktree标志即可CLI 自动建目录、切分支、记录基准提交省掉一串手敲的 git 命令。下文按真实操作顺序讲清楚开启、启动、恢复与清理。✨ 最小可用配置两步开启一次启动开开关、重启、启动隔离会话三步走完就能用。该功能属于Experimental分类默认关闭开启方式有两种交互式在 CLI 中执行/settings搜索Enable Git Worktrees设为true配置文件在settings.json写入下面的内容。{ experimental: { worktrees: true } }配置项定义见 packages/cli/src/config/settingsSchema.ts其中requiresRestart: true写得很明白修改后必须重启 CLI。然后在仓库根目录启动第一个隔离会话gemini --worktree feature-search gemini --worktree # 省略名称系统自动生成随机名--worktree有短写形式-w。命名规则是固定的目录落在项目根下的.gemini/worktrees/名称分支名一律worktree-名称无论怎么起名都能靠这条规则定位到你的 worktree。操作走查退出、恢复、清理按这个顺序走退出、恢复、清理三件事都发生在会话之外按实际操作顺序走一遍。退出 worktree 会话后改动都留在原地用/quit或CtrlC退出时CLI 不做任何自动删除worktree 目录、worktree-名称分支、未提交改动、新分支上已有的提交全部原样留在原地。退出界面会打印两条可直接复制的命令一条用于cd回去恢复会话一条用于git worktree remove手动清理。提示文案的生成逻辑在 packages/cli/src/ui/components/SessionSummaryDisplay.tsx路径和会话 ID 会按当前 shell 做转义再输出贴进任何终端都能直接执行。如何恢复上次的 worktree 会话cd进对应 worktree 目录用--resume加会话 ID 启动即可会话 ID 就是退出界面上--resume后面那串值cd .gemini/worktrees/feature-search gemini --resume session_id其余会话管理细节见 docs/cli/session-management.md。清理 worktree 与分支 确定不再要的任务直接用原生 Git 命令清理分支名遵循worktree-名称约定git worktree remove .gemini/worktrees/feature-search --force git branch -D worktree-feature-search想自己控制目录和分支命名也可以手动创建git worktree add ../my-feature-dir -b my-feature再cd进该目录启动gemini。注意 CLI 只自动管理.gemini/worktrees/下的 worktree你手动放在别处的 worktree 不会被干预。机制透视三个决定安全性的内部设计核心逻辑集中在 packages/core/src/services/worktreeService.ts三个设计点值得记住base SHA 基准记录创建 worktree 前先抓取当前 HEAD 作为基准提交之后靠对比基准判断该 worktree 是否产生过偏离这是有没有改动判断的前提防重复创建守卫创建成功后立即chdir切入新目录并打上环境变量标记。CLI 之后若因内存分配等原因重新拉起自身进程守卫会直接短路避免在 worktree 里再套建一层。守卫实现位于packages/cli/src/utils/worktreeSetup.tsif (process.env[GEMINI_CLI_WORKTREE_HANDLED] 1) { return undefined; }条件清理能力核心层已有无改动就删、有改动就留的逻辑git 命令一旦失败保守按有改动处理防止误删但当前退出路径遵循更稳妥的不自动删除策略这项能力属于该功能的演进方向。边界与坑上手前把这份清单过一遍⚠️ 该功能实验性、活跃开发中动手前先看完这 6 条必须重启改完experimental.worktrees后重启 CLI 才生效热改无效全新副本要自己搭环境每个 worktree 都是全新代码副本依赖不会跟着复制需自行跑npm install/yarn、配置虚拟环境或执行项目标准构建未开开关时标志直接报错传了--worktree却没启用该开关启动会直接失败并明确提示需要先开启experimental.worktrees别指望自动清理当前退出时不会自动删除任何东西目录和分支留到你手动清理行为可能随版本变化实验性功能细节以最新版官方文档为准git 走安全环境所有 git 子进程都通过安全环境变量构造执行避免宿主机 git 配置异常影响 worktree 操作。速查与延伸常用操作压缩成一张表贴在手边操作命令说明开启功能/settings→ Enable Git Worktrees trueExperimental 分类改后需重启配置文件开启experimental: {worktrees: true}写入 settings.json启动具名隔离会话gemini --worktree 名称目录.gemini/worktrees/名称分支worktree-名称随机名启动gemini --worktree名称由系统自动生成恢复会话gemini --resume session_id在对应 worktree 目录内执行移除 worktreegit worktree remove 路径 --force适用于被保留的 worktree删除分支git branch -D worktree-名称分支命名遵循worktree-名称约定延伸阅读官方功能文档docs/cli/git-worktrees.md设置参考docs/cli/settings.md会话管理docs/cli/session-management.md【免费下载链接】awesome-design-systems ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表