VSCode不管理Git账号,需用Git的includeIf按目录自动切换用户信息,并配合SSH config中Host别名严格匹配remote URL。先清全局user配置,在~/.gitconfig中添加gitdir路由规则,分别指向公司与个人配置文件;SSH config须为不同账号定义独立Host别名,remote URL必须显式使用对应别名,IdentityFile写绝对路径且私钥权限设为600。

VSCode 本身不处理 Git 账号切换,真正起作用的是 Git 的分层配置机制 + SSH 的 host 路由能力。只配 VSCode 设置项或只改全局 .gitconfig,必然混账号、推错仓库、被拒绝权限。
Git 提交身份必须按目录自动切换
关键不是“VSCode 怎么设”,而是让 Git 自己根据当前项目路径加载对应账号。Git 2.13+ 的 includeIf 是目前最干净、最稳定的方式。
- 先清掉全局 user 配置:
git config --global --unset user.name和git config --global --unset user.email,否则所有仓库默认继承它 - 在
~/.gitconfig末尾加两段路由规则(注意路径结尾必须带/):[includeIf "gitdir:~/work/"] path = ~/.gitconfig-work [includeIf "gitdir:~/personal/"] path = ~/.gitconfig-personal -
~/.gitconfig-work写公司信息:[user] name = Zhang San email = zhangsan@company.com -
~/.gitconfig-personal写个人信息:[user] name = @zhangsan email = zhangsan@gmail.com
SSH config 必须用 Host 别名,不能直接写 github.com
很多人以为配个 Host github.com 就能覆盖所有请求——不行。SSH 匹配的是 URL 中 @ 后面的主机字段,git@github.com 和 git@github-work 是两个完全不同的 host,必须显式区分。
用大白话操作当前项目的 Git/GitHub——配置 GitHub(装 gh CLI + 登录 + 建仓库)、备份、拉取下载、查询历史、回滚代码、管理分支。当用户用日常语言表达 git 意图时触发(例如"git备份一下""git下载项目""git拉下来""git看看我改了啥""git回退到上一个版本""git新建个分支搞新功能""git合并到主分支""git
- Windows config 路径是
C:\Users\{用户名}\.ssh\config,macOS/Linux 是~/.ssh/config;文件权限必须设为600(Linux/macOS 执行chmod 600 ~/.ssh/config),否则 OpenSSH 直接忽略 - 每个账号定义独立 Host 别名,例如:
Host github-work HostName github.com User git IdentityFile ~/.ssh/id_work Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_personal - 已有仓库必须改 remote:
git remote set-url origin git@github-work:org/repo.git,不能指望它自动识别 -
IdentityFile必须写绝对路径,~不展开,Windows 写C:/Users/Alice/.ssh/id_work,macOS 写/Users/Alice/.ssh/id_work
私钥带密码时,VSCode 终端可能卡住
VSCode 内置终端默认不继承系统 ssh-agent 环境变量,哪怕你在系统终端里已运行 ssh-add,VSCode 的 Source Control 面板仍会弹密码框或静默失败。
- macOS:在
~/.ssh/config加一行AddKeysToAgent yes,首次使用时会自动加入 agent - Windows(OpenSSH for Windows):需手动启动服务(
Start-Service ssh-agent),再在 VSCode 终端中执行ssh-add ~/.ssh/id_work - 开发机/可信环境可省略密码:生成密钥时直接回车跳过 passphrase,避免每次操作都中断流程
- 私钥文件权限必须是
600(-rw-------),~/.ssh目录权限必须是700(drwx------),否则 SSH 拒绝加载
最容易被忽略的是 remote URL 和 config Host 别名的严格对应关系——哪怕只差一个短横线,git push 就会走默认密钥,导致 Permission denied 或提交到错误账号。别依赖“看起来一样”,用 git remote get-url origin 和 ssh -F ~/.ssh/config -T git@xxx 逐个验证。










