两个开发目录来自同一个Git仓库,能同时停在不同分支,暂存的修改也不同。这样的行为并不矛盾:git worktree把多个工作树关联到同一仓库,同时为每个工作树保存需要独立的状态。[1]
官方手册在add的说明中指出,新建的关联工作树共享仓库资料,但HEAD、index等每工作树文件属于例外。HEAD用于标识当前检出的状态,index是暂存区相关文件。因此,目录甲准备下一次提交的内容,不应仅因目录乙也关联同一仓库,就被理解成乙的暂存状态已经相同。
引用的共享规则也需要单独识读。手册说明,一般而言,HEAD这类伪引用按工作树分开,refs/下的引用共享;但refs/bisect、refs/worktree和refs/rewritten是例外,并不共享。[1] 因而,“引用全部独立”和“所有引用全部共享”都过于简单。分支引用与当前工作树状态不是同一层资料。
以一个本文自拟的协作情境说明:一名开发者在一个工作树处理长期修改,同时在另一个工作树查看修复分支。记录交接时,应把目录、当前提交或分支、暂存与未暂存内容对应写清。只说“两份目录都来自同一个仓库”,还不足以解释各自准备提交什么。这是理解机制的例子,本文没有创建工作树或操作实际分支。
手册的DETAILS进一步说明,每个关联工作树在仓库的worktrees管理目录中有自己的私有子目录。其.git可以是指向这些管理资料的文件,而不是另一个完整的.git目录。官方还提醒不要猜测某路径一定属于私有或公共目录,应通过Git提供的路径解析机制确认。[1] 本稿只解释这种关系,不提出直接编辑管理文件的步骤。
配置也不天然完全隔离。所读页面指出,默认仓库配置在工作树之间共享,并另有按工作树配置的扩展机制。因此,看到不同的检出目录,不能推定其中一处的配置调整只影响这一处。实际影响仍应以配置来源和软件版本核对,而不是根据目录名作判断。
对开发资料交接而言,可以把“共享仓库对象与引用”和“当前工作树状态”分列记录。关联工作树提供并行工作的组织方式,但不应据此认定已经建立独立备份或所有本地修改均已入库。本文采用2026年10月9日读取的git-worktree官方手册,页面标示最近更新对应2.56.0;未检查读者本机版本,也未执行创建、清理或迁移。
参考来源:[1] Git project,git-worktree Documentation。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。