必须在每个项目单独设git config --local user.email,vscode不会自动切换;全局配置仅兜底,本地配置优先;includeif可批量管理多项目;勿用vscode的git.user.name设置。

git config --local user.email 必须在每个项目里单独设
VSCode 不会自动根据项目切换 Git 提交信息,git config --global user.email 是兜底值,只要项目目录下有 .git/config 里的 [user] 区块,它就优先用本地配置。不手动设,就会全部打上全局邮箱——这是“公司提交显示个人邮箱”或“GitHub Verified 失效”的最常见原因。
操作很简单,在项目根目录打开终端执行:
git config --local user.name "Your Real Name"git config --local user.email "you@work.com"
完成后检查 .git/config 文件末尾是否新增了如下内容:
[user] name = Your Real Name email = you@work.com
VSCode 的 Source Control 面板下次 commit 时就会读取这个值。注意:这个配置只对当前仓库生效,复制仓库或新建分支都不继承。
includeIf 比 --local 更适合多项目批量管理
如果你有固定目录结构(比如所有工作项目都在 ~/work/,个人项目在 ~/personal/),用 includeIf 可以避免每个项目都手敲一遍 --local。它靠路径前缀自动加载对应配置文件,Git 2.13+ 原生支持,VSCode 完全兼容。
在 ~/.gitconfig 末尾添加:
[includeIf "gitdir:~/work/"]
path = ~/work/.gitconfig
[includeIf "gitdir:~/personal/"]
path = ~/personal/.gitconfig
然后分别创建这两个文件:
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
-
~/work/.gitconfig写入:[user] name = Work Name email = you@work.com
-
~/personal/.gitconfig写入:[user] name = Personal Name email = me@gmail.com
关键点:gitdir: 后的路径必须以 / 结尾,且是绝对路径;path = 后也必须是绝对路径,不能用 ~。
别碰 VSCode 设置里的 git.user.name
VSCode 设置项 git.user.name 和 git.user.email 是纯前端 fallback,只在 Git 配置完全缺失时才生效。它不写入任何配置文件,也不参与 Git 命令行调用逻辑。一旦你在项目里执行过 git config --local 或用了 includeIf,这两项就彻底失效。
更麻烦的是:它对所有打开的文件夹统一生效,无法按项目区分。你改一次,所有项目提交人都变——这反而制造混乱。直接删掉这两项设置,让 Git 自己管提交人。
SSH key 和 HTTP 密码不是一回事,但邮箱必须匹配
很多人混淆了认证方式和提交身份。SSH key(如 id_work)只管“你能不能推送到远程”,而 user.email 决定“这次提交算谁的”。GitHub/GitLab 显示的 author、Verified 状态、贡献统计,全看后者。
所以即使你用不同 SSH key 连接不同账号,如果 user.email 没配对,提交仍会挂在错误账户下。典型表现:
- 用公司 SSH key 推送,但
user.email是个人邮箱 → GitHub 显示 “unverified” - 用个人 token 克隆 HTTPS 仓库,但
user.email是公司邮箱 → 贡献没计入个人主页
验证方法:在项目里运行 git log --pretty=format:"%h %an " -n 1,看输出的邮箱是否是你期望的那个。










