多根工作区是唯一生效前提:必须手动添加各仓库根目录并保存为.code-workspace文件,同时关闭git.autoRepositoryDetection,二者缺一不可。

多根工作区是唯一生效前提
VSCode 不会自动把父目录下多个 .git 文件夹识别为独立仓库——哪怕你打开的是 ~/projects,里面包含 client/、server/、shared/ 三个带 .git 的子目录,SCM 视图也只显示一个仓库。这不是卡顿或配置错误,而是设计如此。
必须手动执行 File > Add Folder to Workspace…,逐个添加每个仓库的**根目录**(不能只加父目录),添加完毕后务必 File > Save Workspace As… 生成 my-workspace.code-workspace 文件。
- 下次启动必须双击该
.code-workspace文件,或运行code my-workspace.code-workspace;code .无效 - 验证是否成功:资源管理器顶部应显示多个并列文件夹图标;SCM 顶部下拉框中应列出全部仓库路径
- 如果某个仓库没出现,检查它根目录下是否有真实有效的
.git目录(不是空文件,也没被files.exclude隐藏)
git.autoRepositoryDetection 必须关掉
默认开启的 git.autoRepositoryDetection 会递归扫描整个工作区,把 node_modules/.git、build/.git、甚至子模块里残留的 .git 文件(非目录)误识别为独立仓库,导致 SCM 卡顿、状态错乱、下拉菜单出现灰色无效条目。
在设置中搜索 git.autoRepositoryDetection,根据项目结构选择:
- 项目结构扁平(如
./app、./api、./infra并列)→ 设为false,完全禁用自动探测 - 项目有明确一级子目录层级,且确定只有这些子目录含真实仓库 → 设为
subfolders - 设为
false后若某仓库仍未显示,右键其文件夹 →Git: Open Repository in Parent Folder
SCM 顶部下拉框控制所有 Git 操作作用域
这个下拉框不是“展示开关”,而是所有 Git 操作的实际控制开关:点 Commit、Pull、Push 都只对当前选中的那个仓库生效。它不会跨仓库误操作,但也绝不会自动聚合。
- 点击下拉框可快速切换当前上下文,但不会自动跳转到对应仓库的文件 —— 想聚焦某仓库变更,需手动打开它里面的任意文件,或右键仓库条目 →
Reveal in Source Control - 右键某个仓库条目 →
Open in Terminal,终端会自动cd到该仓库根目录,比手动git -C更可靠 - 如果下拉菜单为空或只有一项,说明漏加文件夹,或某个文件夹内缺失有效
.git目录
批量 Git 操作别碰 UI,终端脚本才是正解
SCM 视图不提供“全部拉取”“全部提交”按钮。强行在 UI 上逐个切换仓库操作,效率低、易漏、还可能误选错仓库。
推荐用终端脚本统一处理,例如在工作区根目录下写一个 sync-all.sh:
for repo in client server shared; do echo "--- $repo ---" cd "$repo" && git pull && cd .. done
或者用一行命令快速进入各仓库根目录执行:
git -C client pull && git -C server pull && git -C shared pull- 更稳妥的方式是先用
git rev-parse --show-toplevel确认路径,再组合执行
真正容易被忽略的点是:多根工作区的配置和 git.autoRepositoryDetection 的关闭必须同步完成,缺一不可;否则你看到的“多个仓库”只是幻觉,SCM 实际操作时仍会掉进单仓库逻辑里。


















