入门 Zed Industries 2026-09-14 17:42:19 · 0 阅读

第43章 Zed 第43章:可信 worktree 机制详解

Zed 中的 worktree 是一个目录或单个文件,Zed 会将其作为独立的“项目”打开。 当你运行 zed some/path、将文件或目录拖入 Zed,或打开用户设置文件时,Zed 都会打开一个新的 worktree。

注意:这里的范围比 Git worktree 更广。Git worktree 是 Git 管理的关联检出目录;而 Zed 的信任模型适用于每一个打开的文件或文件夹根目录,包括 Git worktree。

每个打开的 worktree 都可以包含一个 .zed/settings.json 文件,其中提供额外的配置选项,可能需要安装并启动语言服务器或 MCP 服务器。 为了让用户根据自己的威胁模型和风险承受能力进行选择,所有 worktree 默认处于限制模式。限制模式会阻止下载并运行 .zed/settings.json 中的相关项目。在 worktree 被信任之前,Zed 不会执行相关的未信任操作,而是等待用户确认。这给了用户审查项目设置、MCP 服务器和语言服务器的机会。

Zed 仍然信任它全局安装的工具。全局 MCP 服务器和全局语言服务器(如 Prettier 和 Copilot)照常安装和启动,不受 worktree 信任状态的影响。

如果 worktree 未被信任,Zed 会在标题栏中显示一个感叹号图标。点击该图标或使用 workspace::ToggleWorktreeSecurity 操作将弹出安全模态框,允许用户信任该 worktree。

信任 worktree 的决定会在重启后持久化。你可以使用 workspace::ClearTrustedWorktrees 命令清除所有已信任的 worktree。 该命令会重启 Zed,以确保没有任何未信任的设置、语言服务器或 MCP 服务器残留。

此功能在本地以及 SSH 和 WSL 远程主机上均可使用。在这种情况下,Zed 按主机追踪信任信息。

限制模式包含哪些内容

限制模式阻止以下行为:

  • 解析和应用项目设置(.zed/settings.json
  • 安装和启动语言服务器
  • 安装和启动 MCP 服务器

配置宽泛的 worktree 信任

默认情况下,Zed 不信任新创建的 worktree。用户必须逐个信任每个新的 worktree。虽然不推荐这样做,但用户可以通过以下设置(编辑方法)信任所有 worktree:

json [settings] "session": { "trust_all_worktrees": true }

自动信任的 worktree 不会在重启后保留;只有手动信任的 worktree 才会。这确保了如果用户后来禁用 trust_all_worktrees,他们对新出现的 worktree 能重新做出信任决策。

信任层级

以下内容主要涉及内部细节,可能会变动,但有助于解释如何同时批准多个信任请求。 Zed 的信任机制分为多个层级,依据请求类型,从信任度最低到最高依次为:

  • “单文件 worktree”

打开一个空白的 Zed 窗口后,你可以打开单个文件。在打开目录后,也可以打开该目录之外的文件。 一个常见示例是 {#action zed::OpenSettingsFile},它可能会为该文件启动语言服务器并创建一个新的单文件 worktree。

如果语言服务器遭遇供应链攻击,启动它会带来风险;因此,Zed 默认对此进行限制。除非其所在目录已被信任或已信任所有 worktree,否则每个单文件 worktree 都需要单独获得信任授权。

  • “目录 worktree”

如果在 Zed 中打开了某个目录,则它是一个完整的 worktree。它可能会启动项目设置中定义的多个语言服务器和 MCP 服务器。因此,除非存在上级目录的信任授权(见下文),否则每个目录 worktree 都需要单独获得信任授权。

当目录 worktree 获得信任后,允许下载并启动语言和 MCP 服务器,此时系统也会自动为该宿主启用单文件 worktree 的信任。这在可信目录 worktree 中使用语言服务器功能并打开单个文件时非常有用。

  • “父目录 worktree”

为了同时为多个目录 worktree 授予信任,可以通过勾选相应复选框,信任 Zed 中打开的某个父目录 worktree 的所有子目录。这将为其所有子目录(包括当前及潜在的目录 worktree)授予信任。

评论 (0)