工作区隔离
Verdent 如何通过 git worktree 分离并行代码更改
工作区隔离通过 git worktree 在文件系统层面分离并行代码更改。一个工作区拥有自己的目录、分支检出、文件和暂存状态。
当前 Verdent Desktop 界面未开放手动创建工作区。New Workspace 按钮、对应键盘快捷键以及 Duplicate to New Workspace 均已隐藏。复制回复会在当前工作区中创建新任务。
你将学到什么
- 工作区隔离如何防止冲突
- git worktree 如何实现隔离
- Base Workspace 与 Workspaces 的区别
- 现有工作区和 Verdent 管理的工作区如何显示在界面中
- 工作区管理的最佳实践
什么是工作区隔离?
当 Verdent 在不同工作区中运行工作时,一个 worktree 中的更改不会修改另一个 worktree 的文件或暂存状态。这让并行实现和审查更安全。
工作原理
| 层级 | 工作原理 |
|---|---|
| 目录 | 每个工作区都是一个隔离目录 |
| 分支 | 每个工作区都有自己的分支检出 |
| 文件 | 一个工作区中的文件更改不会影响其他工作区 |
| 暂存 | 每个工作区都有自己的暂存区 |
优势
零干扰
文件更改会保留在独立的 worktree 目录中
安全实验
尝试有风险的更改,而不影响稳定代码
清晰对比
使用 git diff 比较不同工作区中的方案
选择性变基
只变基你信任的结果
Base Workspace 与 Workspaces
Base Workspace
Base workspace 是你的原始仓库检出,用作默认起点。
| 特性 | 描述 |
|---|---|
| 位置 | 你的原始 git clone 或 init 位置 |
| 主分支 | 通常位于 main 或 development 分支 |
| 参考点 | 用于比较实验性工作的来源 |
何时使用 Base:
- 不需要隔离的快速更改
- 用作比较实验性工作的参考点
- 当你希望更改直接进入主分支时
- 不需要并行执行的简单任务
Workspace
Workspace 是使用 git worktree 创建的隔离工作环境,拥有自己独立的分支检出和文件状态。
当受支持的工作流需要隔离代码更改时,Verdent 可以使用工作区。现有工作区会继续与其项目关联,并且可以包含多个任务。
使用现有工作区
已属于某个项目的工作区会继续在 Projects 面板中与该项目分组显示。选择一个工作区即可查看其中的任务和文件状态。
- 同一工作区内的任务共享其文件,但保留各自独立的对话上下文。
- 切换到另一个工作区会改变当前活跃的 worktree 和分支上下文。
- 复制回复会将复制出的任务保留在当前工作区中。
- 只有在提交、变基或以其他方式保留所需工作之后,才删除工作区。
变基工作区更改
当你准备将工作区更改集成回主分支时:
使用 Verdent UI
完成工作
在工作区中完成工作
审查更改
点击中间面板中的 Task Changes,审查所有修改
变基到主分支
点击 Workspace Bar 中的 Workspace Actions → Rebase to main branch
解决冲突
如有提示,解决所有冲突
验证
确认前审查更改
保持工作区更新
使用 Workspace Actions → Sync with main branch 将主分支的最新更改拉取到你的工作区。这有助于在变基时避免大型冲突。
最佳实践
工作区维护
| 做法 | 原因 |
|---|---|
| 删除已变基的工作区 | 释放磁盘空间 |
| 移除废弃实验 | 保持工作区列表易于管理 |
| 保持合理的工作区数量 | 系统资源是有限的 |
Git 卫生
| 做法 | 原因 |
|---|---|
| 频繁提交 | 切换前提交进行中的工作 |
| 小提交 | 更小的提交更容易 cherry-pick |
| 定期与 base 同步 | 不要让工作区与主分支偏离太远 |
| 降低冲突复杂度 | 定期集成可避免大型冲突 |
常见问题
每个工作区会占用多少磁盘空间?
每个工作区会复制工作文件,但共享 .git 目录。每个工作区的空间占用大致等于你的项目大小。大型项目如果有许多并行工作区,会占用大量磁盘空间。
我可以删除工作区吗?
可以。通过 Verdent 删除工作区。这会移除目录,但会保留分支上任何已提交的工作。
如何创建新工作区?
当前 Desktop 界面不支持手动创建。New Workspace 入口和快捷键已隐藏。Verdent 仍可在内部为受支持的隔离工作流使用工作区。
如果删除工作区,未提交的更改会怎样?
删除工作区时,未提交的更改会丢失。移除工作区前,务必提交或 stash 更改。
我可以将工作区转换为 base 工作区吗?
不能直接转换,但你可以将工作区中的所有更改变基到主分支,然后删除该工作区。分支历史会被保留。
worktree 是否适用于所有 git 托管服务?
是。Git worktree 是标准 git 功能。它适用于 GitHub、GitLab、Bitbucket 以及任何其他 git 托管服务。