SPT术语库

工作树 Worktree

你要同时修复一个 bug 和继续做新功能,又不想反复切换当前目录里的分支。

Git约 10 分钟 · 从真实需求理解

1Worktree 解决什么问题?

GIT · LINKED WORKSPACES一个仓库,两个工作目录

SHARED HISTORY → LINKED FOLDERS,Worktree 让不同分支同时保持在手边。

SHARED REPOSITORYapp/.git
a84c91eone history, shared objects
PRIMARY WORKTREE../appmainclean · running app
LINKED WORKTREE../ui-refreshfeature/ui-refreshwaiting for linked directory
ISOLATED WORKING FILES
../appclean../ui-refreshM Button.vue

同一历史 · 不同目录 · 各自状态

WORKTREE LISTgit worktree listchecking paths…main + feature/ui-refresh

Worktree 让一个 Git 仓库同时拥有多个工作目录。每个目录可以检出不同分支,所以你能在一个目录修 bug、另一个目录做新功能,不必先把当前目录的改动藏起来再切换。

  • 多个工作目录共享同一仓库历史,不等于复制出多个独立仓库。
  • 每棵工作树有自己的路径、分支和工作区状态。
  • worktree list 可以检查当前仓库有哪些目录,以及每个目录检出了什么分支。

2Worktree 不等于 Clone、Branch 或普通复制

Clone 通常把远程仓库初始化成一个新的本地副本;Worktree 则在同一个本地仓库旁边增加工作目录。Branch 是历史上的分支指针,Worktree 是让分支实际占用一个目录的工作区关系。

  • Worktree 适合并行处理多个分支,改动仍要分别提交、合并或清理。
  • 它不是把文件夹复制一份;多个目录共享 Git 对象和仓库关系。

删除或移动链接目录前要确认工作树状态;目录变多也会增加管理和磁盘成本。

3一棵 Worktree 由哪些部件组成?

REPOSITORYapp/.gita84c91e · shared history
FOLDERS
../appmain../ui-refreshfeature/ui-refresh
ISOLATIONmain: cleanfeature: M Button.vue
INVENTORYgit worktree list2 paths · 2 branches

Worktree 共享仓库历史,但每个目录拥有自己的检出分支和工作区状态。

把 Worktree 拆开看,仓库历史提供共同基础,主目录和链接目录分别承载不同分支,独立工作区显示各自文件状态,worktree list 则把这些关系列出来。

  • REPOSITORY 是多个工作目录共享的本地仓库历史。
  • FOLDERS 是实际存在的主目录和链接目录。
  • ISOLATION 是每个目录各自检出分支、记录文件状态。
  • INVENTORY 是检查路径、分支和当前工作树数量的清单。

4怎样把 Worktree 需求交给 Agent?

请为已有的 app 仓库保留 ../app 的 main 工作目录,再添加 ../ui-refresh 作为 feature/ui-refresh 的 Worktree;在 ui-refresh 里修改 Button.vue,展示 main 目录仍然干净,最后用 git worktree list 列出两个路径和分支。请把 Worktree、Clone、Branch、Stash、Merge 和普通复制目录区分开,支持共享重播、Anatomy 键盘操作、暗色主题和 390px、320px 窄屏。

5不用背,看看你能不能判断

1 / 3

Worktree 最主要解决什么问题?

请选择一个最符合题意的答案

选择答案后自动进入下一题

社区延伸

看别人真实遇到过什么

社区帖子还没有关联到这个词条。